name: Manifests # Prueft deploy/k8s ohne Cluster-Zugriff: Overlay und jeden Rollout-Schritt # rendern, gegen die Kubernetes-Schemas validieren und die Regeln testen # (NetworkPolicies, Pod-Haertung, Ressourcen, CronJobs, Digests, Live-Selektoren). # # Bewusst kein pull_request-Trigger: der Runner laeuft im Cluster, und ein # Fork-PR braechte eigenen Code (auch eine geaenderte Fassung dieser Datei, # also ohne jeden if-Waechter) darauf zur Ausfuehrung. push setzt # Schreibrechte am Repo voraus; jeder Branch-Push wird geprueft, damit auch # Aenderungen vor dem Merge nach main durch die CI gehen. on: push: paths: ['deploy/k8s/**', '.gitea/workflows/manifests.yml'] workflow_dispatch: jobs: validate: runs-on: docker-builder env: # Werkzeuge mit festen Versionen; jede Datei wird gegen ihre SHA-256 von # der offiziellen Release-Seite geprueft, bevor sie laeuft: # kubectl: https://dl.k8s.io/release//bin/linux/amd64/kubectl.sha256 # kubeconform: CHECKSUMS im GitHub-Release yannh/kubeconform # yq: checksums (Spalte SHA-256) im GitHub-Release mikefarah/yq # Ein Update aendert Version und Pruefsumme zusammen. KUBECTL_VERSION: v1.36.5 KUBECTL_SHA256: 33bc88a24c3b09cf55bfd59e6ca977881b61fc3f25ab65bc80c65b430248648e KUBECONFORM_VERSION: v0.8.0 KUBECONFORM_SHA256: 9bc2bffbf71f261128533edaf912153948b7ff238f9a531ae6d34466ec287883 YQ_VERSION: v4.53.6 YQ_SHA256: c5f056448f973ae7d39b5401949648a78f2dc1947d6a8eb65be60d5c504b9385 steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Node einrichten uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22 - name: kubectl, kubeconform und yq laden run: | mkdir -p "$RUNNER_TEMP/bin" cd "$RUNNER_TEMP" curl -fsSLo kubectl "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" echo "${KUBECTL_SHA256} kubectl" | sha256sum -c - curl -fsSLo kubeconform.tar.gz "https://github.com/yannh/kubeconform/releases/download/${KUBECONFORM_VERSION}/kubeconform-linux-amd64.tar.gz" echo "${KUBECONFORM_SHA256} kubeconform.tar.gz" | sha256sum -c - tar -xzf kubeconform.tar.gz kubeconform curl -fsSLo yq "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64" echo "${YQ_SHA256} yq" | sha256sum -c - install -m 0755 kubectl kubeconform yq "$RUNNER_TEMP/bin/" - name: Overlay rendern run: | "$RUNNER_TEMP/bin/kubectl" kustomize deploy/k8s/overlays/encry > "$RUNNER_TEMP/rendered.yaml" "$RUNNER_TEMP/bin/yq" ea -o=json '[.]' "$RUNNER_TEMP/rendered.yaml" > "$RUNNER_TEMP/rendered.json" - name: Rollout-Schritte rendern # Runbook Schritte 1, 2, 3 und 5: Overlay mit den bis dahin # freigegebenen Komponenten (siehe render-stages.mjs). run: | export KUBECTL="$RUNNER_TEMP/bin/kubectl" YQ="$RUNNER_TEMP/bin/yq" node deploy/k8s/tests/render-stages.mjs "$RUNNER_TEMP/stages" - name: Gegen Kubernetes-Schemas pruefen run: | "$RUNNER_TEMP/bin/kubeconform" -strict -summary "$RUNNER_TEMP/rendered.yaml" "$RUNNER_TEMP"/stages/*.yaml - name: Regeln testen run: | export RENDERED_MANIFESTS="$RUNNER_TEMP/rendered.json" RENDERED_STAGES="$RUNNER_TEMP/stages/stages.json" node --test deploy/k8s/tests/manifest-policy.test.mjs