Versionsnummer beim Push verpflichtend

Der Tag des Images soll bewusst gesetzt werden, nicht aus der pom.xml
hergeleitet. Ohne Argument bricht das Skript mit der Kurzhilfe ab.

Damit entfällt die Auswertung der pom.xml über den Maven-Wrapper - das
Skript braucht backend/mvnw nicht mehr und startet ohne Maven-Lauf. Das
Format ist wieder strikt x.y.z; die Ausnahme fuer -SNAPSHOT gab es nur,
weil die pom.xml als Vorgabe diente.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-24 15:11:39 +02:00
co-authored by Claude Opus 5
parent 2a2bce860e
commit b2f608055a
+11 -24
View File
@@ -5,18 +5,16 @@ set -euo pipefail
readonly SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
# Paket-Registry des Gitea auf gitea.appcreation.de; der Pfad ist dort
# <Host>/<Besitzer>/<Image>.
readonly REGISTRY_IMAGE="gitea.appcreation.de/appcreation/swyxweb"
readonly BACKEND_DIR="${SCRIPT_DIR}/backend"
readonly REGISTRY_IMAGE="gitea.appcreation.de/sven/swyxweb"
readonly PLATFORM="linux/amd64"
usage() {
cat <<'EOF'
Verwendung:
./docker_push.sh [x.y.z] [--dry-run]
./docker_push.sh <x.y.z> [--dry-run]
Beispiel:
./docker_push.sh 0.9.13
./docker_push.sh
./docker_push.sh 0.9.13 --dry-run # nur bauen, nicht pushen
Voraussetzungen:
@@ -24,7 +22,8 @@ Voraussetzungen:
- Login zur Registry wurde bereits ausgeführt:
docker login gitea.appcreation.de
Ohne Versionsargument wird die Version aus backend/pom.xml verwendet.
Die Versionsnummer ist Pflicht: Sie wird zum Tag des Images und muss damit
bewusst gesetzt werden. Sie wird nicht aus der pom.xml abgeleitet.
Gebaut wird das Dockerfile im Wurzelverzeichnis: Es übersetzt Frontend *und*
Backend selbst, ein vorheriger lokaler Maven- oder npm-Lauf ist also nicht
@@ -41,21 +40,6 @@ require_command() {
command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden."
}
# Die Version steht in backend/pom.xml; ausgelesen wird sie mit dem Maven-
# Wrapper des Backends (backend/mvnw), nicht mit einem global installierten Maven.
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=""
DRY_RUN=false
@@ -78,11 +62,14 @@ for arg in "$@"; do
esac
done
[[ -n "${VERSION}" ]] || VERSION="$(resolve_pom_version)"
if [[ -z "${VERSION}" ]]; then
usage >&2
echo >&2
fail "Es muss eine Versionsnummer angegeben werden, z. B. ./docker_push.sh 0.9.13"
fi
# -SNAPSHOT ist zugelassen, weil die pom.xml zurzeit 0.0.1-SNAPSHOT trägt.
if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-SNAPSHOT)?$ ]]; then
fail "Versionsnummer muss das Format x.y.z oder x.y.z-SNAPSHOT haben (war: '${VERSION}')."
if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
fail "Versionsnummer muss das Format x.y.z haben (war: '${VERSION}')."
fi
require_command docker