update build.sh to accept generic services

This commit is contained in:
2026-04-28 13:38:55 +02:00
parent 56cc400d8f
commit ea3efd3767

View File

@@ -11,14 +11,13 @@
# -r, --release Version from .env for releases # -r, --release Version from .env for releases
# -v, --version VERSION Custom version # -v, --version VERSION Custom version
# -p, --push Push images after build # -p, --push Push images after build
# -b, --backend-only Only build backend # -o, --only SERVICE Only build this service (repeatable)
# -f, --frontend-only Only build frontend
# -h, --help Show this help # -h, --help Show this help
# #
# Examples: # Examples:
# ./build.sh -r -p # ./build.sh -r -p
# ./build.sh -s -frontend-only # ./build.sh -s -o frontend
# ./build.sh -v dev # ./build.sh -v dev -o backend -o frontend
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# -e: Exit immediately if any command returns a non-zero exit code # -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 # -o pipefail: Make pipelines fail if any command in the pipe fails, not just the last one
set -euo pipefail set -euo pipefail
# --- services to build (subfolder name = image suffix) ---------------------
#SERVICES=(backend frontend)
#cd to script dir #cd to script dir
pushd "$(dirname "${BASH_SOURCE[0]}")" pushd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null
SCRIPT_DIR="$(pwd)" SCRIPT_DIR="$(pwd)"
source "${SCRIPT_DIR}/.env" source "${SCRIPT_DIR}/.env"
popd popd > /dev/null
#default: snapshot #default: snapshot
VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")" VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")"
PUSH=false PUSH=false
BUILD_BACKEND=true ONLY=()
BUILD_FRONTEND=true
usage() { usage() {
sed -n '/^# Usage:/,/^# ---/p' "$0" | sed 's/^# //' | sed 's/^#//' sed -n '/^# Usage:/,/^# ---/p' "$0" | sed 's/^# //' | sed 's/^#//'
@@ -48,68 +49,53 @@ usage() {
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
-s|--snapshot) VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")"; shift ;; -s|--snapshot) VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")"; shift ;;
-r|--release) VERSION=${IMAGE_TAG}; shift ;; -r|--release) VERSION="${IMAGE_TAG}"; shift ;;
-v|--version) VERSION=$2; shift 2 ;; -v|--version) VERSION="$2"; shift 2 ;;
-p|--push) PUSH=true; shift ;; -p|--push) PUSH=true; shift ;;
-b|--backend-only) BUILD_FRONTEND=false; shift ;; -o|--only) ONLY+=("$2"); shift 2 ;;
-f|--frontend-only) BUILD_BACKEND=false; shift ;;
-h|--help) usage ;; -h|--help) usage ;;
*) echo "Unknown option: $1" >&2; exit 1 ;; *) echo "Unknown option: $1" >&2; exit 1 ;;
esac esac
done done
# --- derive image names ----------------------------------------------------- # if --only was given, filter SERVICES down to those entries
registry_prefix="${REGISTRY}/" if [[ ${#ONLY[@]} -gt 0 ]]; then
BACKEND_IMAGE="${registry_prefix}${IMAGE_NAME}-backend:${VERSION}" SERVICES=("${ONLY[@]}")
FRONTEND_IMAGE="${registry_prefix}${IMAGE_NAME}-frontend:${VERSION}" fi
#SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "============================================" echo "============================================"
echo " ${IMAGE_NAME} - Docker Build" echo " ${IMAGE_NAME} - Docker Build"
echo ""
echo " Services : ${SERVICES[*]}"
echo " Version : ${VERSION}" echo " Version : ${VERSION}"
echo " Registry : ${REGISTRY}" echo " Registry : ${REGISTRY}"
echo " Push : ${PUSH}" echo " Push : ${PUSH}"
echo "============================================" echo "============================================"
# --- build ------------------------------------------------------------------ # --- build ------------------------------------------------------------------
if $BUILD_BACKEND; then for SERVICE in "${SERVICES[@]}"; do
IMAGE="${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}"
echo "" echo ""
echo ">>> Building backend: ${BACKEND_IMAGE}" echo ">>> Building ${SERVICE}: ${IMAGE}"
docker build \ docker build --tag "${IMAGE}" "${SCRIPT_DIR}/${SERVICE}"
--tag "${BACKEND_IMAGE}" \ echo " ${SERVICE} built successfully."
"${SCRIPT_DIR}/backend" done
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 ------------------------------------------------------------------- # --- push -------------------------------------------------------------------
if $PUSH; then if $PUSH; then
docker login ${REGISTRY} docker login "${REGISTRY}"
for SERVICE in "${SERVICES[@]}"; do
if $BUILD_BACKEND; then IMAGE="${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}"
echo "" echo ""
echo ">>> Pushing ${BACKEND_IMAGE}" echo ">>> Pushing ${IMAGE}"
docker push "${BACKEND_IMAGE}" docker push "${IMAGE}"
fi done
if $BUILD_FRONTEND; then
echo ""
echo ">>> Pushing ${FRONTEND_IMAGE}"
docker push "${FRONTEND_IMAGE}"
fi
echo "" echo ""
echo "Images pushed successfully." echo "Images pushed successfully."
fi fi
echo "" echo ""
echo "Done." echo "Done."
if $BUILD_BACKEND; then echo " Backend → ${BACKEND_IMAGE}"; fi for SERVICE in "${SERVICES[@]}"; do
if $BUILD_FRONTEND; then echo " Frontend → ${FRONTEND_IMAGE}"; fi echo " ${SERVICE}${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}"
done