Files
qaffee/build.sh

106 lines
3.2 KiB
Bash
Raw Permalink 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
2026-04-28 13:22:26 +02:00
# -v, --version VERSION Custom version
2026-04-28 11:28:07 +02:00
# -p, --push Push images after build
# -o, --only SERVICE Only build this service (repeatable)
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 -o frontend
# ./build.sh -v dev -o backend -o frontend
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]}")" > /dev/null
2026-04-28 13:22:26 +02:00
SCRIPT_DIR="$(pwd)"
source "${SCRIPT_DIR}/build.env"
2026-04-28 13:57:43 +02:00
# read from .env:
# REGISTRY, IMAGE_NAME, IMAGE_VERSION, SNAPSHOT_TAG
# SERVICES (subfolder name = image suffix)
popd > /dev/null
2026-04-28 11:28:07 +02:00
2026-04-28 13:57:43 +02:00
#default: build snapshot
VERSION="${IMAGE_VERSION}-${SNAPSHOT_TAG}" # read from .env
2026-04-28 11:28:07 +02:00
PUSH=false
ONLY=()
2026-04-28 11:28:07 +02:00
usage() {
sed -n '/^# Usage:/,/^# ---/p' "$0" | sed 's/^# //' | sed 's/^#//'
exit 0
}
# --- parse arguments -------------------------------------------------------
while [[ $# -gt 0 ]]; do
case $1 in
-s|--snapshot) VERSION="${IMAGE_VERSION}-SNAPSHOT$(git rev-parse --short HEAD 2>/dev/null || echo "local")"; shift ;;
-r|--release) VERSION="${IMAGE_VERSION}"; shift ;;
-v|--version) VERSION="$2"; shift 2 ;;
-p|--push) PUSH=true; shift ;;
-o|--only) ONLY+=("$2"); shift 2 ;;
-h|--help) usage ;;
2026-04-28 11:28:07 +02:00
*) echo "Unknown option: $1" >&2; exit 1 ;;
esac
done
# if --only was given, filter SERVICES down to those entries
if [[ ${#ONLY[@]} -gt 0 ]]; then
SERVICES=("${ONLY[@]}")
fi
2026-04-28 11:28:07 +02:00
echo "============================================"
2026-04-28 13:57:43 +02:00
echo " Docker Build - ${IMAGE_NAME}"
echo ""
echo " Services : ${SERVICES[*]}"
2026-04-28 11:28:07 +02:00
echo " Version : ${VERSION}"
echo " Registry : ${REGISTRY}"
echo " Push : ${PUSH}"
echo "============================================"
# --- build ------------------------------------------------------------------
for SERVICE in "${SERVICES[@]}"; do
IMAGE="${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}"
2026-04-28 11:28:07 +02:00
echo ""
echo ">>> Building ${SERVICE}: ${IMAGE}"
docker buildx build \
--platform ${platform} \
-t "${IMAGE}" \
$($PUSH && echo "--push" || echo "") \
"${SCRIPT_DIR}/${SERVICE}"
echo " ${SERVICE} built successfully."
done
2026-04-28 11:28:07 +02:00
# --- push -------------------------------------------------------------------
if $PUSH; then
2026-04-28 13:57:43 +02:00
docker login "${REGISTRY}" # read from .env
for SERVICE in "${SERVICES[@]}"; do
IMAGE="${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}"
2026-04-28 11:28:07 +02:00
echo ""
echo ">>> Pushing ${IMAGE}"
docker push "${IMAGE}"
done
2026-04-28 11:28:07 +02:00
echo ""
echo "Images pushed successfully."
fi
echo ""
echo "Done."
for SERVICE in "${SERVICES[@]}"; do
echo " ${SERVICE}${REGISTRY}/${IMAGE_NAME}-${SERVICE}:${VERSION}"
done