From 9c77e90c9257f1852c121115e67859550710e551 Mon Sep 17 00:00:00 2001 From: Markus Date: Tue, 28 Apr 2026 11:28:07 +0200 Subject: [PATCH] add build.sh --- build.sh | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 build.sh diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..062ee4b --- /dev/null +++ b/build.sh @@ -0,0 +1,107 @@ +#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 \ No newline at end of file