#!/usr/bin/env bash # # Build and push BanGUI container images to the Gitea registry. # # Usage: # ./push.sh # builds & pushes with tag "latest" # ./push.sh v1.2.3 # builds & pushes with tag "v1.2.3" # ./push.sh v1.2.3 --no-build # pushes existing images only # # Prerequisites: # podman login git.lpl-mind.de (or: docker login git.lpl-mind.de) set -euo pipefail # --------------------------------------------------------------------------- # Configuration # --------------------------------------------------------------------------- REGISTRY="git.lpl-mind.de" NAMESPACE="lukas.pupkalipinski" PROJECT="bangui" BACKEND_IMAGE="${REGISTRY}/${NAMESPACE}/${PROJECT}/backend" FRONTEND_IMAGE="${REGISTRY}/${NAMESPACE}/${PROJECT}/frontend" TAG="${1:-latest}" SKIP_BUILD=false if [[ "${2:-}" == "--no-build" ]]; then SKIP_BUILD=true fi SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" # --------------------------------------------------------------------------- # Helpers # --------------------------------------------------------------------------- log() { echo -e "\n>>> $*"; } err() { echo -e "\nERROR: $*" >&2; exit 1; } # Detect container engine (podman preferred, docker fallback) if command -v podman &>/dev/null; then ENGINE="podman" elif command -v docker &>/dev/null; then ENGINE="docker" else err "Neither podman nor docker is installed." fi # --------------------------------------------------------------------------- # Pre-flight checks # --------------------------------------------------------------------------- echo "============================================" echo " BanGUI — Build & Push" echo " Engine : ${ENGINE}" echo " Registry : ${REGISTRY}" echo " Tag : ${TAG}" echo "============================================" if [[ "${ENGINE}" == "podman" ]]; then if ! podman login --get-login "${REGISTRY}" &>/dev/null; then err "Not logged in. Run:\n podman login ${REGISTRY}" fi fi # --------------------------------------------------------------------------- # Build # --------------------------------------------------------------------------- if [[ "${SKIP_BUILD}" == false ]]; then log "Building backend image → ${BACKEND_IMAGE}:${TAG}" "${ENGINE}" build \ -t "${BACKEND_IMAGE}:${TAG}" \ -f "${SCRIPT_DIR}/Dockerfile.backend" \ "${PROJECT_ROOT}" log "Building frontend image → ${FRONTEND_IMAGE}:${TAG}" "${ENGINE}" build \ -t "${FRONTEND_IMAGE}:${TAG}" \ -f "${SCRIPT_DIR}/Dockerfile.frontend" \ "${PROJECT_ROOT}" fi # --------------------------------------------------------------------------- # Push # --------------------------------------------------------------------------- log "Pushing ${BACKEND_IMAGE}:${TAG}" "${ENGINE}" push "${BACKEND_IMAGE}:${TAG}" log "Pushing ${FRONTEND_IMAGE}:${TAG}" "${ENGINE}" push "${FRONTEND_IMAGE}:${TAG}" # --------------------------------------------------------------------------- # Summary # --------------------------------------------------------------------------- echo "" echo "============================================" echo " Push complete!" echo "" echo " Images:" echo " ${BACKEND_IMAGE}:${TAG}" echo " ${FRONTEND_IMAGE}:${TAG}" echo "" echo " Deploy on server:" echo " ${ENGINE} login ${REGISTRY}" echo " ${ENGINE} compose -f Docker/compose.prod.yml pull" echo " ${ENGINE} compose -f Docker/compose.prod.yml up -d" echo "============================================"