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>
100 lines
2.5 KiB
Bash
Executable File
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}"
|