feat(verify-kustomize-base): prüfen, ob die publizierte Base ihr eigenes YAML lesen kann - #167
Merged
Merged
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
So sind
homerun2-git-pitcher:v1.0.0undhomerun2-k8s-pitcher:v1.0.0ausgeliefert worden. Gemerkt hat es niemand, weil beide Komponenten nirgends deployt waren.Die Action
actions/verify-kustomize-basezieht das publizierte Artefakt peroraszurück und parst jedenConfigMap-data-Key, der auf.yaml/.ymlendet.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.yamlfuhr längstdagger/kcl@v0.114.0und war nie betroffen; nurcall-go-release.yamlhing aufv0.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
k8s-pitcher-kustomize:v1.0.0data.profile.yamlgit-pitcher-kustomize:v1.0.0data.watch-profile.yamlgit-pitcher-kustomize:v1.0.1core-catcher-kustomize:v1.0.0Die 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
oraslandet in$RUNNER_TEMP/binstatt/usr/local/bin— keinsudo, damit es auf self-hosted Runnern nicht scheitert.--break-system-packages-Fallback deckt PEP-668-Runner ab (derdagger-labda-Runner ist so einer).registry-tokenist optional; öffentliche Pakete gehen anonym.actionlint: 19 Findings vorher, 19 nachher. README-Abschnitt ergänzt.🤖 Generated with Claude Code
https://claude.ai/code/session_019CgKbaC85iWMgfZzpF4SGX