diff --git a/.gitea-ci.yml b/.gitea-ci.yml new file mode 100644 index 0000000..33fd0c9 --- /dev/null +++ b/.gitea-ci.yml @@ -0,0 +1,70 @@ +version: "1" + +stages: + - build + - push + - deploy + +variables: + IMAGE_NAME: angular-web-app + TAG: ${CI_COMMIT_TAG:-latest} + GITEA_REGISTRY: ${CI_REGISTRY} + +build-image: + stage: build + image: docker:latest + services: + - docker:dind + before_script: + - apk add --no-cache bash + - chmod +x ./build.sh ./push-to-gitea.sh + script: + - echo "🏗️ Baue Docker-Image..." + - ./build.sh "$IMAGE_NAME" "$TAG" + artifacts: + paths: + - Dockerfile + +push-image: + stage: push + image: docker:latest + services: + - docker:dind + before_script: + - apk add --no-cache bash + - chmod +x ./push-to-gitea.sh + script: + - echo "⬆️ Push zu Gitea Registry..." + - | + export GITEA_REGISTRY="${CI_REGISTRY}" + export GITEA_USER="${CI_REGISTRY_USER}" + export GITEA_TOKEN="${CI_REGISTRY_TOKEN}" + ./push-to-gitea.sh "$IMAGE_NAME" "$TAG" + only: + - main + - tags + +deploy: + stage: deploy + image: alpine:latest + needs: + - push-image + only: + - main + - tags + script: + - echo "🚀 Deployment auf Zielserver starten..." + - apk add --no-cache openssh-client docker-cli + - echo "${DEPLOY_KEY}" > /tmp/deploy_key.pem + - chmod 600 /tmp/deploy_key.pem + - | + ssh -i /tmp/deploy_key.pem -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_HOST} </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}"