Files
qaffee/build.sh

115 lines
3.4 KiB
Bash
Raw Normal View History

2026-04-28 13:22:26 +02:00
#!/bin/bash
2026-04-28 11:28:07 +02:00
# ---------------------------------------------------------------------------
2026-04-28 13:22:26 +02:00
# build.sh Build and push Docker images
2026-04-28 11:28:07 +02:00
#
# Usage:
# ./build.sh [OPTIONS]
#
# Options:
2026-04-28 13:22:26 +02:00
# -s, --snapshot Version from git ref for prototyping
# -r, --release Version from .env for releases
# -v, --version VERSION Custom version
2026-04-28 11:28:07 +02:00
# -p, --push Push images after build
2026-04-28 13:22:26 +02:00
# -b, --backend-only Only build backend
# -f, --frontend-only Only build frontend
2026-04-28 11:28:07 +02:00
# -h, --help Show this help
#
# Examples:
2026-04-28 13:22:26 +02:00
# ./build.sh -r -p
# ./build.sh -s -frontend-only
# ./build.sh -v dev
2026-04-28 11:28:07 +02:00
# ---------------------------------------------------------------------------
2026-04-28 13:22:26 +02:00
# -e: Exit immediately if any command returns a non-zero exit code
# -u: Treat unset variables as errors
# -o pipefail: Make pipelines fail if any command in the pipe fails, not just the last one
set -euo pipefail
#cd to script dir
pushd "$(dirname "${BASH_SOURCE[0]}")"
SCRIPT_DIR="$(pwd)"
source "${SCRIPT_DIR}/.env"
popd
2026-04-28 11:28:07 +02:00
#default: snapshot
2026-04-28 13:22:26 +02:00
VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")"
2026-04-28 11:28:07 +02:00
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
2026-04-28 13:22:26 +02:00
-s|--snapshot) VERSION="${IMAGE_TAG}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")"; shift ;;
2026-04-28 11:28:07 +02:00
-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