#!/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 # //. readonly REGISTRY_IMAGE="gitea.appcreation.de/sven/swyxweb" readonly PLATFORM="linux/amd64" usage() { cat <<'EOF' Verwendung: ./docker_push.sh [--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}"