Files
BanGUI/Docker/push.sh

106 lines
3.5 KiB
Bash

#!/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 "============================================"