101 lines
2.6 KiB
Bash
Executable File
101 lines
2.6 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. Whisper und sein Modell werden ins Image integriert; WAV-Dateien werden
|
|
lokal im Container transkribiert. Der SwyxTray-Mock bleibt ohne Profil "mock" deaktiviert.
|
|
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}"
|