Files
swyxweb/docker_push.sh
T
SvenandClaude Opus 5 b2f608055a 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>
2026-08-24 15:11:39 +02:00

100 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
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/sven/swyxweb"
readonly PLATFORM="linux/amd64"
usage() {
cat <<'EOF'
Verwendung:
./docker_push.sh <x.y.z> [--dry-run]
Beispiel:
./docker_push.sh 0.9.13
./docker_push.sh 0.9.13 --dry-run # nur bauen, nicht pushen
Voraussetzungen:
- Docker Buildx ist installiert
- Login zur Registry wurde bereits ausgeführt:
docker login gitea.appcreation.de
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
nötig. Der SwyxTray-Mock ist im Image nicht enthalten (Profil "mock").
EOF
}
fail() {
echo "Fehler: $*" >&2
exit 1
}
require_command() {
command -v "$1" >/dev/null 2>&1 || fail "'$1' wurde nicht gefunden."
}
VERSION=""
DRY_RUN=false
for arg in "$@"; do
case "${arg}" in
-h|--help)
usage
exit 0
;;
--dry-run)
DRY_RUN=true
;;
-*)
fail "Unbekannte Option '${arg}'."
;;
*)
[[ -z "${VERSION}" ]] || fail "Es ist nur eine Versionsnummer erlaubt."
VERSION="${arg}"
;;
esac
done
if [[ -z "${VERSION}" ]]; then
usage >&2
echo >&2
fail "Es muss eine Versionsnummer angegeben werden, z. B. ./docker_push.sh 0.9.13"
fi
if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
fail "Versionsnummer muss das Format x.y.z haben (war: '${VERSION}')."
fi
require_command docker
docker buildx version >/dev/null 2>&1 || fail "Docker Buildx ist nicht verfügbar."
cd "${SCRIPT_DIR}"
if [[ "${DRY_RUN}" == true ]]; then
echo "Baue Image ${REGISTRY_IMAGE}:${VERSION} für ${PLATFORM} (dry run, kein Push) ..."
docker buildx build \
--platform "${PLATFORM}" \
-f "${SCRIPT_DIR}/Dockerfile" \
-t "${REGISTRY_IMAGE}:${VERSION}" \
"${SCRIPT_DIR}"
echo "Fertig gebaut, nicht gepusht: ${REGISTRY_IMAGE}:${VERSION}"
exit 0
fi
echo "Baue und pushe Image ${REGISTRY_IMAGE}:${VERSION} für ${PLATFORM} ..."
docker buildx build \
--platform "${PLATFORM}" \
-f "${SCRIPT_DIR}/Dockerfile" \
-t "${REGISTRY_IMAGE}:${VERSION}" \
--push \
"${SCRIPT_DIR}"
echo "Fertig: ${REGISTRY_IMAGE}:${VERSION}"