Skip to content

feat(verify-kustomize-base): prüfen, ob die publizierte Base ihr eigenes YAML lesen kann - #167

Merged
patrick-hermann-sva merged 1 commit into
mainfrom
feat/verify-kustomize-base
Sep 5, 2026
Merged

feat(verify-kustomize-base): prüfen, ob die publizierte Base ihr eigenes YAML lesen kann#167
patrick-hermann-sva merged 1 commit into
mainfrom
feat/verify-kustomize-base

Conversation

@patrick-hermann-sva

Copy link
Copy Markdown
Contributor

Folgt auf #164, das die Ursache behoben hat. Das hier ist der Test, der den Fehler damals gefangen hätte.

Die Lücke

Ein ConfigMap-Wert, der als gequoteter Multiline-Skalar statt als Block-Literal (|) serialisiert wird, ist ein vollkommen gültiges Manifest. YAML faltet die Zeilenumbrüche eines gequoteten Skalars beim Lesen zu Leerzeichen — das eingebettete Dokument kommt als eine Zeile ohne Einrückung an.

Ergebnis: das Artefakt pusht grün, jedes Manifest validiert, ArgoCD synct sauber, und erst der konsumierende Pod stirbt beim Start an

yaml: mapping values are not allowed in this context

So sind homerun2-git-pitcher:v1.0.0 und homerun2-k8s-pitcher:v1.0.0 ausgeliefert worden. Gemerkt hat es niemand, weil beide Komponenten nirgends deployt waren.

Die Action

actions/verify-kustomize-base zieht das publizierte Artefakt per oras zurück und parst jeden ConfigMap-data-Key, der auf .yaml/.yml endet.

Gegen das gezogene Artefakt statt gegen einen lokalen Render zu prüfen ist Absicht: das sind die Bytes, die Konsumenten bekommen, also fällt auch ein Defekt der Publishing-Toolchain darunter — exakt der Fall hier.

Verdrahtet in beiden Push-Pfaden

Und der Release-Pfad ist der wichtigere. call-push-kustomize.yaml fuhr längst dagger/kcl@v0.114.0 und war nie betroffen; nur call-go-release.yaml hing auf v0.82.1. Eine Prüfung allein im PR-Pfad hätte grün gemeldet, während das Release kaputt rausging — deshalb steht sie an beiden Stellen.

Gegen echte Artefakte getestet

Artefakt erwartet Ergebnis
k8s-pitcher-kustomize:v1.0.0 FAIL exit 1, nennt data.profile.yaml
git-pitcher-kustomize:v1.0.0 FAIL exit 1, nennt data.watch-profile.yaml
git-pitcher-kustomize:v1.0.1 PASS exit 0, „1 embedded YAML key(s) parse"
core-catcher-kustomize:v1.0.0 PASS exit 0, kein eingebettetes YAML

Die Fehlermeldung nennt Datei, Key und die YAML-Fehlerzeile und erklärt die Ursache — der Bug ist beim nächsten Mal in Sekunden statt in Stunden gefunden.

Nicht simuliert: die Schritte wurden mit echtem oras, echten anonymen Pulls und den echten Registry-Inhalten ausgeführt, nicht mit nachgebauten Dateien.

Details

  • oras landet in $RUNNER_TEMP/bin statt /usr/local/bin — kein sudo, damit es auf self-hosted Runnern nicht scheitert.
  • PyYAML wird nur installiert, wenn es fehlt; der --break-system-packages-Fallback deckt PEP-668-Runner ab (der dagger-labda-Runner ist so einer).
  • Ein registry-token ist optional; öffentliche Pakete gehen anonym.
  • Eine Base ohne eingebettetes YAML meldet „nothing to verify" und ist grün — kein Zwang für Komponenten ohne Profil.

actionlint: 19 Findings vorher, 19 nachher. README-Abschnitt ergänzt.

🤖 Generated with Claude Code

https://claude.ai/code/session_019CgKbaC85iWMgfZzpF4SGX

…enes YAML lesen kann

Ein ConfigMap-Wert, der als gequoteter Multiline-Skalar statt als
Block-Literal serialisiert wird, ist ein vollkommen gueltiges Manifest.
YAML faltet die Zeilenumbrueche eines gequoteten Skalars beim Lesen zu
Leerzeichen -- das eingebettete Dokument kommt als eine Zeile ohne
Einrueckung an. Das Artefakt pusht gruen, jedes Manifest validiert, und
erst der konsumierende Pod stirbt an

  yaml: mapping values are not allowed in this context

Genau so sind homerun2-git-pitcher v1.0.0 und homerun2-k8s-pitcher
v1.0.0 ausgeliefert worden, und niemand hat es gemerkt, weil beide
Komponenten nirgends deployt waren.

Die neue Composite-Action zieht das publizierte Artefakt per oras
zurueck und parst jeden ConfigMap-data-Key, der auf .yaml/.yml endet.
Bewusst gegen das GEZOGENE Artefakt statt gegen einen lokalen Render:
das sind die Bytes, die Konsumenten bekommen, also faellt auch ein
Defekt der Publishing-Toolchain darunter -- der Fall, um den es hier
geht.

Verdrahtet in beiden Push-Pfaden. Der Release-Pfad ist der wichtigere:
call-push-kustomize.yaml fuhr laengst dagger/kcl@v0.114.0 und war nie
betroffen, waehrend call-go-release.yaml auf v0.82.1 haengen blieb. Eine
Pruefung nur im PR-Pfad haette gruen gemeldet, waehrend das Release
kaputt rausging.

Gegen echte Artefakte getestet:
  k8s-pitcher-kustomize:v1.0.0   -> exit 1, nennt data.profile.yaml
  git-pitcher-kustomize:v1.0.0   -> exit 1, nennt data.watch-profile.yaml
  git-pitcher-kustomize:v1.0.1   -> exit 0, "1 embedded YAML key(s) parse"
  core-catcher-kustomize:v1.0.0  -> exit 0, kein eingebettetes YAML

actionlint: 19 Findings vorher, 19 nachher.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019CgKbaC85iWMgfZzpF4SGX
@patrick-hermann-sva
patrick-hermann-sva merged commit 24c44ce into main Sep 5, 2026
1 check passed
@patrick-hermann-sva
patrick-hermann-sva deleted the feat/verify-kustomize-base branch September 5, 2026 12:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant