#!/usr/bin/env bash set -e # Skript bei Fehlern sofort beenden # === .env-Datei laden === if [ -f .env ]; then echo "📄 Lade Umgebungsvariablen aus .env..." export $(grep -v '^#' .env | xargs) else echo "⚠️ Keine .env-Datei gefunden – verwende Umgebungsvariablen oder Defaults." fi # === KONFIGURATION === GITEA_REGISTRY="${GITEA_REGISTRY:-gitea.example.com}" GITEA_USER="${GITEA_USER:-}" GITEA_TOKEN="${GITEA_TOKEN:-}" DEFAULT_IMAGE="angular-web-app" DEFAULT_TAG="latest" # === PARAMETER === IMAGE_NAME="${1:-$DEFAULT_IMAGE}" TAG="${2:-$DEFAULT_TAG}" # === BUILD AUSFÜHREN === echo "🏗️ Baue Docker-Image..." ./build.sh "$IMAGE_NAME" "$TAG" # === IMAGE-TAGGING === FULL_IMAGE="${GITEA_REGISTRY}/${GITEA_USER}/${IMAGE_NAME}:${TAG}" echo "🏷️ Tagge Image für Gitea-Registry: ${FULL_IMAGE}" docker tag "${IMAGE_NAME}:${TAG}" "${FULL_IMAGE}" # === LOGIN === if [ -n "$GITEA_USER" ] && [ -n "$GITEA_TOKEN" ]; then echo "🔐 Melde bei Gitea Registry an (${GITEA_REGISTRY})..." echo "$GITEA_TOKEN" | docker login "$GITEA_REGISTRY" -u "$GITEA_USER" --password-stdin else echo "⚠️ Kein Benutzername oder Token angegeben – überspringe Login." fi # === PRÜFEN, OB IMAGE SCHON EXISTIERT === echo "🔎 Prüfe, ob Image bereits in Registry existiert..." EXISTS=false if docker manifest inspect "${FULL_IMAGE}" >/dev/null 2>&1; then EXISTS=true echo "🟡 Image ${FULL_IMAGE} existiert bereits in der Registry." else echo "🟢 Image ${FULL_IMAGE} ist neu – wird gepusht." fi # === DIGESTS VERGLEICHEN (wenn vorhanden) === if [ "$EXISTS" = true ]; then LOCAL_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "${FULL_IMAGE}" 2>/dev/null | cut -d'@' -f2) REMOTE_DIGEST=$(docker manifest inspect "${FULL_IMAGE}" 2>/dev/null | sha256sum | awk '{print $1}') if [ -n "$LOCAL_DIGEST" ] && [ -n "$REMOTE_DIGEST" ] && [ "$LOCAL_DIGEST" = "$REMOTE_DIGEST" ]; then echo "✅ Lokales und entferntes Image sind identisch – Push wird übersprungen." exit 0 else echo "🆕 Unterschiede festgestellt – Push wird ausgeführt." fi fi # === PUSH === echo "⬆️ Push zum Gitea-Repository..." docker push "${FULL_IMAGE}" echo "✅ Upload abgeschlossen: ${FULL_IMAGE}"