name: Dynamic Branch Deploy on: [push] env: REGISTRY: git.zb-server.de BASE_DOMAIN: zb-server.de jobs: build-and-deploy: runs-on: ubuntu-latest steps: # 1. Code auschecken - name: Checkout Code uses: actions/checkout@v3 # 2. Variablen vorbereiten (VEREINFACHT & KORRIGIERT) - name: Prepare Environment Variables id: prep run: | # Wir nehmen einfach den vollen Repo-Namen (z.B. "User/Repo") und machen ihn klein # Das ist sicherer als cut und owner einzeln zu holen FULL_IMAGE_PATH=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]') # Repo Name für K8s (nur der Teil nach dem /) REPO_LOWER=$(echo "$FULL_IMAGE_PATH" | cut -d'/' -f2) # Branch Name säubern BRANCH_LOWER=$(echo "${{ gitea.ref_name }}" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g') # Namespace und URL bauen TARGET_NS="${REPO_LOWER}-${BRANCH_LOWER}" APP_URL="${TARGET_NS}.${{ env.BASE_DOMAIN }}" # Image Tag (Commit Hash) IMAGE_TAG="${{ gitea.sha }}" # Debug Ausgabe (damit du siehst, ob es geklappt hat) echo "DEBUG: Image Path is: $FULL_IMAGE_PATH" echo "DEBUG: Target NS is: $TARGET_NS" # In Gitea Actions Environment schreiben echo "FULL_IMAGE_PATH=$FULL_IMAGE_PATH" >> $GITHUB_ENV echo "REPO_NAME=$REPO_LOWER" >> $GITHUB_ENV echo "TARGET_NS=$TARGET_NS" >> $GITHUB_ENV echo "APP_URL=$APP_URL" >> $GITHUB_ENV echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV # 3. Kaniko Build (Mit DEBUG Fix) - name: Build and Push with Kaniko uses: aevea/action-kaniko@v0.12.0 with: registry: ${{ env.REGISTRY }} # username/password werden oft nicht gebraucht, wenn Gitea Actions Runner # im selben Netzwerk ist, aber sicher ist sicher: username: ${{ gitea.actor }} password: ${{ secrets.PACKAGE_TOKEN }} # Hier war der Fehler: Wir nutzen jetzt die vereinfachte Variable image: ${{ env.FULL_IMAGE_PATH }} tag: ${{ env.IMAGE_TAG }} cache: true # WICHTIG bei selbst-signierten oder internen Gitea Instanzen: extra_args: --skip-tls-verify-pull --insecure # 4. Setup Kubectl (Interner Trick) - 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 # Internal DNS Trick sed -i 's|server: https://.*:6443|server: https://kubernetes.default.svc:443|g' $HOME/.kube/config # 5. Deploy to Kubernetes - name: Deploy to Kubernetes run: | # Namespace kubectl create namespace ${{ env.TARGET_NS }} --dry-run=client -o yaml | kubectl apply -f - # Platzhalter ersetzen # Wir bauen den vollen Image-Pfad für die Ersetzung FULL_IMAGE_URL="${{ env.REGISTRY }}/${{ env.FULL_IMAGE_PATH }}:${{ env.IMAGE_TAG }}" # Ingress sed -i "s|\${APP_URL}|${{ env.APP_URL }}|g" k8s/ingress.yaml # App Deployment & Secrets # HINWEIS: Falls du keine Secrets hast, nimm Fallback-Werte oder entferne die Zeilen ADMIN_USER="${{ secrets.ADMIN_USER || 'lehrer' }}" ADMIN_PASS="${{ secrets.ADMIN_PASS || 'geheim123' }}" sed -i "s|\${IMAGE_NAME}|$FULL_IMAGE_URL|g" k8s/app.yaml sed -i "s|\${ADMIN_USER}|$ADMIN_USER|g" k8s/app.yaml sed -i "s|\${ADMIN_PASS}|$ADMIN_PASS|g" k8s/app.yaml # Apply echo "Deploying to Namespace: ${{ env.TARGET_NS }}" kubectl apply -f k8s/redis.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/app.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/ingress.yaml -n ${{ env.TARGET_NS }} # Force Update kubectl rollout restart deployment/escape-game -n ${{ env.TARGET_NS }} # 6. Summary - name: Summary run: echo "🚀 Deployed to https://${{ env.APP_URL }}"