#!/usr/bin/env bash set -euo pipefail readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" readonly REGISTRY_IMAGE="registry.assecutor.org/votianlt" 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 "./mvnw" ]] || fail "'./mvnw' wurde nicht gefunden oder ist nicht ausführbar." local version version="$( ./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} ..." ./mvnw -Pproduction -DskipTests -Drevision="${VERSION}" package JAR_FILE="target/votianlt-${VERSION}.jar" [[ -f "${JAR_FILE}" ]] || fail "Release-JAR wurde nicht gefunden: ${JAR_FILE}" echo "Pushe Image ${REGISTRY_IMAGE}:${VERSION} ..." docker buildx build \ --platform linux/amd64 \ --build-arg "JAR_FILE=${JAR_FILE}" \ -t "${REGISTRY_IMAGE}:${VERSION}" \ --push \ . echo "Fertig: ${REGISTRY_IMAGE}:${VERSION}"