#set -euo pipefail set -u # --------------------------------------------------------------------------- # build.sh – Build and push Docker images for Strichliste # # Usage: # ./build.sh [OPTIONS] # # Options: # -v, --version VERSION Image tag / version (default: git short SHA) # -r, --registry REGISTRY Registry prefix (default: "") # -p, --push Push images after build # --backend-only Only build backend # --frontend-only Only build frontend # -h, --help Show this help # # Examples: # ./build.sh -v 1.2.3 -r ghcr.io/aquantico --push # ./build.sh --version latest --registry registry.example.com --push # ./build.sh -v dev # build only, no push # --------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source ".env" #default: snapshot VERSION=$(git rev-parse --short HEAD 2>/dev/null || echo "local") PUSH=false BUILD_BACKEND=true BUILD_FRONTEND=true usage() { sed -n '/^# Usage:/,/^# ---/p' "$0" | sed 's/^# //' | sed 's/^#//' exit 0 } # --- parse arguments ------------------------------------------------------- while [[ $# -gt 0 ]]; do case $1 in -s|--snapshot) VERSION=$(git rev-parse --short HEAD 2>/dev/null || echo "local"); shift ;; -r|--release) VERSION=${IMAGE_TAG}; shift ;; -v|--version) VERSION=$2; shift 2 ;; -p|--push) PUSH=true; shift ;; -b|--backend-only) BUILD_FRONTEND=false; shift ;; -f|--frontend-only) BUILD_BACKEND=false; shift ;; -h|--help) usage ;; *) echo "Unknown option: $1" >&2; exit 1 ;; esac done # --- derive image names ----------------------------------------------------- registry_prefix="${REGISTRY}/" BACKEND_IMAGE="${registry_prefix}${IMAGE_NAME}-backend:${VERSION}" FRONTEND_IMAGE="${registry_prefix}${IMAGE_NAME}-frontend:${VERSION}" #SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "============================================" echo " ${IMAGE_NAME} - Docker Build" echo " Version : ${VERSION}" echo " Registry : ${REGISTRY}" echo " Push : ${PUSH}" echo "============================================" # --- build ------------------------------------------------------------------ if $BUILD_BACKEND; then echo "" echo ">>> Building backend: ${BACKEND_IMAGE}" docker build \ --tag "${BACKEND_IMAGE}" \ "${SCRIPT_DIR}/backend" echo " Backend built successfully." fi if $BUILD_FRONTEND; then echo "" echo ">>> Building frontend: ${FRONTEND_IMAGE}" docker build \ --tag "${FRONTEND_IMAGE}" \ "${SCRIPT_DIR}/frontend" echo " Frontend built successfully." fi # --- push ------------------------------------------------------------------- if $PUSH; then docker login ${REGISTRY} if $BUILD_BACKEND; then echo "" echo ">>> Pushing ${BACKEND_IMAGE}" docker push "${BACKEND_IMAGE}" fi if $BUILD_FRONTEND; then echo "" echo ">>> Pushing ${FRONTEND_IMAGE}" docker push "${FRONTEND_IMAGE}" fi echo "" echo "Images pushed successfully." fi echo "" echo "Done." if $BUILD_BACKEND; then echo " Backend → ${BACKEND_IMAGE}"; fi if $BUILD_FRONTEND; then echo " Frontend → ${FRONTEND_IMAGE}"; fi