name: Cleanup Environment on: [delete] jobs: cleanup: runs-on: ubuntu-latest # Nur ausführen, wenn ein Branch gelöscht wurde (keine Tags) if: github.event.ref_type == 'branch' steps: # 1. Variablen berechnen (MIT FIX FÜR REFS/HEADS & MAIN-CHECK) - name: Prepare Variables run: | # Repo Name klein (z.B. "it232abschied") REPO_LOWER=$(echo "${{ gitea.repository }}" | cut -d'/' -f2 | tr '[:upper:]' '[:lower:]') # Branch Name aus Event (z.B. "refs/heads/feature-x") RAW_REF="${{ github.event.ref }}" # "refs/heads/" entfernen BRANCH_CLEAN=${RAW_REF#refs/heads/} # Kleinschreiben & Sonderzeichen BRANCH_LOWER=$(echo "$BRANCH_CLEAN" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g') # Logik synchron zum Deploy: # Main/Master -> Namespace ist nur der Repo-Name # Anderes -> Namespace ist Repo-Branch if [ "$BRANCH_LOWER" = "main" ] || [ "$BRANCH_LOWER" = "master" ]; then TARGET_NS="${REPO_LOWER}" IS_MAIN="true" else TARGET_NS="${REPO_LOWER}-${BRANCH_LOWER}" IS_MAIN="false" fi echo "DEBUG: Clean Branch: $BRANCH_LOWER" echo "DEBUG: Target NS: $TARGET_NS" echo "TARGET_NS=$TARGET_NS" >> $GITHUB_ENV echo "IS_MAIN=$IS_MAIN" >> $GITHUB_ENV # 2. Sicherheits-Check: Niemals Main/Master löschen! # Wir prüfen jetzt die Variable IS_MAIN, statt den Namen hart zu codieren - name: Protect Main if: env.IS_MAIN == 'true' run: | echo "❌ ABBRUCH: Der Produktions-Namespace ${{ env.TARGET_NS }} darf nicht gelöscht werden!" exit 1 # 3. Kubectl einrichten - name: Setup Kubectl run: | curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl mv kubectl /usr/local/bin/ mkdir -p $HOME/.kube echo "${{ secrets.KUBE_CONFIG }}" > $HOME/.kube/config chmod 600 $HOME/.kube/config # Der Trick für interne Kommunikation sed -i 's|server: https://.*:6443|server: https://kubernetes.default.svc:443|g' $HOME/.kube/config # 4. Namespace löschen - name: Delete Namespace run: | echo "🗑️ Lösche Namespace: ${{ env.TARGET_NS }}" # Wir löschen den Namespace ohne zu warten (async), das geht schneller kubectl delete namespace ${{ env.TARGET_NS }} --ignore-not-found --wait=false