#!/usr/bin/env bash set -euo pipefail readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" readonly REGISTRY_IMAGE="registry.assecutor.org/votianlt" readonly BACKEND_DIR="${SCRIPT_DIR}/backend" 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 der pom.xml verwendet. EOF } fail() { echo "Fehler: $*" >&2 exit 1 } require_command() { command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden." } resolve_pom_version() { [[ -x "${BACKEND_DIR}/mvnw" ]] || fail "'${BACKEND_DIR}/mvnw' wurde nicht gefunden oder ist nicht ausführbar." local version version="$( cd "${BACKEND_DIR}" && ./mvnw -q -DforceStdout help:evaluate -Dexpression=project.version \ | awk 'NF { last = $0 } END { print last }' )" [[ -n "${version}" ]] || fail "Version konnte nicht aus der pom.xml ermittelt werden." echo "${version}" } VERSION="${1:-$(resolve_pom_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 "Baue Production-JAR für Version ${VERSION} ..." (cd "${BACKEND_DIR}" && ./mvnw -Pproduction -DskipTests -Drevision="${VERSION}" package) JAR_FILE_REL="target/votianlt-${VERSION}.jar" JAR_FILE_ABS="${BACKEND_DIR}/${JAR_FILE_REL}" [[ -f "${JAR_FILE_ABS}" ]] || fail "Release-JAR wurde nicht gefunden: ${JAR_FILE_ABS}" echo "Pushe Image ${REGISTRY_IMAGE}:${VERSION} ..." docker buildx build \ --platform linux/amd64 \ -f "${BACKEND_DIR}/Dockerfile" \ --build-arg "JAR_FILE=${JAR_FILE_REL}" \ -t "${REGISTRY_IMAGE}:${VERSION}" \ --push \ "${BACKEND_DIR}" echo "Fertig: ${REGISTRY_IMAGE}:${VERSION}"