#!/usr/bin/env bash set -euo pipefail readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" readonly REGISTRY_IMAGE="registry.assecutor.org/muh" readonly APP_CONFIG_FILE="${SCRIPT_DIR}/backend/src/main/resources/application.yml" usage() { cat <<'EOF' Verwendung: ./docker_push.sh [x.y.z] Beispiel: ./docker_push.sh 0.9.13 ./docker_push.sh Voraussetzungen: - Docker Buildx ist installiert - Login zur Registry wurde bereits ausgeführt: docker login registry.assecutor.org Ohne Versionsargument wird automatisch die Version aus backend/src/main/resources/application.yml verwendet. Optional kann VITE_API_URL als Umgebungsvariable gesetzt werden. EOF } fail() { echo "Fehler: $*" >&2 exit 1 } require_command() { command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden." } resolve_app_version() { [[ -f "${APP_CONFIG_FILE}" ]] || fail "'${APP_CONFIG_FILE}' wurde nicht gefunden." local version version="$( awk ' $0 ~ /^muh:[[:space:]]*$/ { in_muh = 1 in_app = 0 next } in_muh && $0 ~ /^[^[:space:]]/ { in_muh = 0 in_app = 0 } in_muh && $0 ~ /^[[:space:]][[:space:]]app:[[:space:]]*$/ { in_app = 1 next } in_app && $0 ~ /^[[:space:]][[:space:]][^[:space:]]/ { in_app = 0 } in_muh && in_app && match($0, /^[[:space:]][[:space:]][[:space:]][[:space:]]version:[[:space:]]*"?([0-9]+\.[0-9]+\.[0-9]+)"?[[:space:]]*$/, a) { print a[1] exit } ' "${APP_CONFIG_FILE}" )" [[ -n "${version}" ]] || fail "Version konnte nicht aus ${APP_CONFIG_FILE} ermittelt werden." echo "${version}" } VERSION="${1:-$(resolve_app_version)}" if [[ "${VERSION}" == "-h" || "${VERSION}" == "--help" ]]; then usage exit 0 fi if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then fail "Versionsnummer muss das Format x.y.z haben." fi require_command docker docker buildx version >/dev/null 2>&1 || fail "Docker Buildx ist nicht verfügbar." cd "${SCRIPT_DIR}" echo "Verwende Release-Version ${VERSION}." echo "Pushe Image ${REGISTRY_IMAGE}:${VERSION} ..." docker buildx build \ --platform linux/amd64 \ --build-arg "VITE_API_URL=${VITE_API_URL:-/api}" \ -t "${REGISTRY_IMAGE}:${VERSION}" \ --push \ . echo "Fertig: ${REGISTRY_IMAGE}:${VERSION}"