checkout, setup-node, setup-buildx, login, metadata und build-push laufen jetzt auf dem Commit, auf den der bisherige Major-Tag am 2026-10-16 zeigte (Tag als Kommentar). Ein verschobener Tag kann so keinen fremden Code mit dem Registry-Token ausführen. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
75 lines
3.5 KiB
YAML
75 lines
3.5 KiB
YAML
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/<v>/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
|