Skip to content

kcl: PushKustomizeBase rendert anonym -- ghcr antwortet mit 429, jeder Kustomize-Push scheitert #391

Closed

Description

@patrick-hermann-sva

Was passiert

Seit dem 2026-09-29 scheitert push-kustomize-base (Modul kcl, v0.132.0) reproduzierbar beim Rendern, noch vor dem Push. KCL lädt seine Abhängigkeiten anonym aus ghcr, und ghcr antwortet mit 429:

failed to get package with '1.31' from 'ghcr.io/kcl-lang/k8s'
failed to resolve 1.31: GET "https://ghcr.io/v2/kcl-lang/k8s/manifests/1.31":
  response status code 429: toomanyrequests: retry-after: 1.014828ms, allowed: 44000/minute

Belegt:

Die Folge: Die Preview-Umgebungen aus stuttgart-things/stuttgart-things#3065 (app-dev) bekommen ihr Kustomize-Artefakt pr-<n>-<sha> nicht. Die Applications für light-catcher und wled-mock bleiben auf Sync „Unknown“. Heute Morgen (05:54 UTC) lief derselbe Workflow noch durch.

Warum es in der CI wie ein Push-Fehler aussieht

Dagger wertet verzögert aus. Im CI-Log steht nur

withExec sh -c 'oras push ghcr.io/…-kustomize:pr-78-<sha> .'
Container.stdout ERROR
! exit code: 1

Das KCL-Rendern scheitert aber davor. Seine Ausgabe (das 429) zeigt Dagger nicht, erst --progress plain lokal macht sie sichtbar. Auf die Zeile mit dem Push schaut man zuerst, sie ist aber die falsche Fährte.

Ursache im Modul

kcl/kustomize.go, PushKustomizeBase: Die Zugangsdaten (user/password) kommen herein, genutzt werden sie aber erst nach dem Rendern für oras login. Das Rendern selbst (kcl run über Run) läuft anonym. Anonyme Pulls von ghcr sind gedrosselt, angemeldete haben deutlich höhere Grenzen.

Vorschlag

  1. Vor dem Rendern bei der Registry anmelden: kcl registry login <registry> -u $USER -p $PASSWORD, mit denselben Secrets, die der Push ohnehin bekommt. Wie in kcl/push.go schon für kcl mod push. Für ghcr-Abhängigkeiten reicht das Workflow-Token (packages: read).
  2. Bei 429 wiederholen: ein paar Versuche mit Backoff um den Abhängigkeits-Pull bzw. kcl run. retry-after liegt im Millisekundenbereich; KCL selbst wiederholt nicht.
  3. Die Fehlerausgabe des Renderns sichtbar machen: Der Exit-Code des KCL-Schritts sollte mit seiner stderr hochkommen, nicht als Container.stdout ERROR am Push.

Danach das Modul releasen und dagger-kcl-module in stuttgart-things/github-workflow-templates (call-push-kustomize.yaml, heute v0.132.0) anheben. Das betrifft jedes Repo, das Kustomize-Basen per PR pusht, also alle homerun2-Komponenten und schmetterpause.

🤖 Generated with Claude Code

Activity

  1. patrick-hermann-sva commented on Sep 29, 2026

    @patrick-hermann-sva
    ContributorAuthor

    Nachtrag nach Messung: Die 429 treffen gezielt viel gezogene kcl-lang-Pakete (k8s:1.30, k8s:1.31, crossplane:1.17.3), mit und ohne Anmeldung, sporadisch: dieselbe Manifest-URL antwortet innerhalb einer Minute mal 200, mal 429. stuttgart-things/*-Pakete antworten 200, githubstatus.com meldet keine Störung. Die Anmeldung allein löst es also nicht. Der PR bringt Anmeldung, Wiederholung und eine lesbare Fehlermeldung. Gegen einen längeren Block hilft nur ein Spiegel der kcl-lang-Abhängigkeiten in einer eigenen Registry oder vendorte Abhängigkeiten.

  2. patrick-hermann-sva commented on Sep 29, 2026

    @patrick-hermann-sva
    ContributorAuthor

    Ausgerollt und belegt: v0.133.1 (#392) über stuttgart-things/github-workflow-templates#194. In stuttgart-things/homerun2-light-catcher#78 lief ein frischer Lauf mit kcl@v0.133.1. Die Wiederholungen bei 429 und der lesbare Fehler kcl run failed: … waren im CI-Log zu sehen, solange ghcr sperrte. Nachdem ghcr kcl-lang/k8s wieder auslieferte, gingen beide Pushes durch, und die Preview auf app-dev ist komplett. Gegen eine längere Sperre bleibt stuttgart-things/kcl#323.

  3. patrick-hermann-sva commented on Oct 7, 2026

    @patrick-hermann-sva
    ContributorAuthor

    Fixed by #392 (f49f635): kcl/auth.go logs in to the registry, retries rate limits (429), and PushKustomizeBase renders with the push credentials (kcl/kustomize.go). Tests are in kcl/auth_test.go. If needed, check the module pin in call-push-kustomize.yaml (github-workflow-templates).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions