diff --git a/build.sh b/build.sh index b7c6678..b0d4a42 100644 --- a/build.sh +++ b/build.sh @@ -8,17 +8,16 @@ # # Options: # -s, --snapshot Version from git ref for prototyping -# -r, --release Version from .env for releases +# -r, --release Version from .env for releases # -v, --version VERSION Custom version # -p, --push Push images after build -# -b, --backend-only Only build backend -# -f, --frontend-only Only build frontend +# -o, --only SERVICE Only build this service (repeatable) # -h, --help Show this help # # Examples: # ./build.sh -r -p -# ./build.sh -s -frontend-only -# ./build.sh -v dev +# ./build.sh -s -o frontend +# ./build.sh -v dev -o backend -o frontend # --------------------------------------------------------------------------- # -e: Exit immediately if any command returns a non-zero exit code @@ -26,18 +25,20 @@ # -o pipefail: Make pipelines fail if any command in the pipe fails, not just the last one set -euo pipefail +# --- services to build (subfolder name = image suffix) --------------------- +#SERVICES=(backend frontend) + #cd to script dir -pushd "$(dirname "${BASH_SOURCE[0]}")" +pushd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null SCRIPT_DIR="$(pwd)" source "${SCRIPT_DIR}/.env" -popd +popd > /dev/null #default: snapshot VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")" PUSH=false -BUILD_BACKEND=true -BUILD_FRONTEND=true +ONLY=() usage() { sed -n '/^# Usage:/,/^# ---/p' "$0" | sed 's/^# //' | sed 's/^#//' @@ -47,69 +48,54 @@ usage() { # --- parse arguments ------------------------------------------------------- while [[ $# -gt 0 ]]; do case $1 in - -s|--snapshot) VERSION="${IMAGE_TAG}-SNAPSHOT$(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 ;; + -s|--snapshot) VERSION="${IMAGE_TAG}-SNAPSHOT$(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 ;; + -o|--only) ONLY+=("$2"); shift 2 ;; + -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)" +# if --only was given, filter SERVICES down to those entries +if [[ ${#ONLY[@]} -gt 0 ]]; then + SERVICES=("${ONLY[@]}") +fi echo "============================================" echo " ${IMAGE_NAME} - Docker Build" +echo "" +echo " Services : ${SERVICES[*]}" echo " Version : ${VERSION}" echo " Registry : ${REGISTRY}" echo " Push : ${PUSH}" echo "============================================" # --- build ------------------------------------------------------------------ -if $BUILD_BACKEND; then +for SERVICE in "${SERVICES[@]}"; do + IMAGE="${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}" 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 + echo ">>> Building ${SERVICE}: ${IMAGE}" + docker build --tag "${IMAGE}" "${SCRIPT_DIR}/${SERVICE}" + echo " ${SERVICE} built successfully." +done # --- push ------------------------------------------------------------------- if $PUSH; then - docker login ${REGISTRY} - - if $BUILD_BACKEND; then + docker login "${REGISTRY}" + for SERVICE in "${SERVICES[@]}"; do + IMAGE="${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}" 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 ">>> Pushing ${IMAGE}" + docker push "${IMAGE}" + done 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 +for SERVICE in "${SERVICES[@]}"; do + echo " ${SERVICE} → ${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}" +done \ No newline at end of file