#!/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 POM_FILE="${SCRIPT_DIR}/backend/pom.xml" 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/pom.xml 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 "${POM_FILE}" ]] || fail "'${POM_FILE}' wurde nicht gefunden." local version version="$(sed -n '//,/<\/parent>/!{ s/.*\(.*\)<\/version>.*/\1/p; }' "${POM_FILE}" | head -1)" [[ -n "${version}" ]] || fail "Version konnte nicht aus ${POM_FILE} ermittelt werden." [[ "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || fail "Version in ${POM_FILE} muss das Format x.y.z haben." 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}"