Repository navigation
fix(renovate): make templated chart versions visible again - #158
Merged
Merged
Conversation
Renovate's helmfile manager reads releases[].version. Since the helmfiles moved their versions into environments.default.values (2718933, 2025-12-11), every release reads `version: {{ .Values.version }}` -- a Go template, which Renovate skips with skipReason "contains-variable": no PR, no warning, no log entry. 40 of 74 version lines were affected, and the Dependency Dashboard listed those files with an empty dependency list. The last Renovate PR dates from 2025-07-25. Annotate each environment value that feeds a chart version with the datasource to look it up in, and add two customManagers that update the default in place (one for plain values, one for values carrying a Go template default). The annotation is derived from the repositories entry the release's chart points at: OCI repos become datasource=docker, plain HTTPS repos datasource=helm. No extractVersion/extractVersionTemplate anywhere: Renovate writes the extracted value back, so stripping a leading "v" would produce defaults that resolve to no chart at all -- homerun, cert-manager and vcluster are all tagged with the v. Also: - migrate the deprecated fileMatch to managerFilePatterns (the dashboard was asking for a config migration) - ignore .k2n/** and tests/**; the k2n examples are generation input, and their stale copies were the only place Renovate still saw tekton - drop the unused "stable" registryAlias pointing at the archived charts.helm.sh/stable - add hack/check-chart-annotations.sh, wired into pre-commit, a check-renovate task and CI, so a new helmfile cannot silently drop out of Renovate again - add lint-renovate / preview-renovate tasks and document all of it Verified with `renovate --platform=local --dry-run=full`: the regex manager extracts 39 deps across 37 files, and the reachable datasources alone yield 11 update branches, among them argo-cd 9.4.15 -> 10.x, minio 16 -> 17 and redis 17 -> 22. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011PK5kbJhuQY3qWU21VmKD3
patrick-hermann-sva
temporarily deployed
to
k8s
August 22, 2026 09:43 — with
GitHub Actions
Inactive
patrick-hermann-sva
temporarily deployed
to
k8s
August 22, 2026 09:43 — with
GitHub Actions
Inactive
The job died in actions/checkout, before the script ever ran: File was unable to be removed Error: EACCES: permission denied, rmdir '.../_work/helm/helm/.claude/skills' .claude/skills/create-helmfile.md is tracked, so every checkout recreates the directory. On kind-testing-runner-1 it is owned root:root -- left there by an earlier container job, which runs as root, while checkout runs as gh-runner and cannot remove it. Any job doing a plain checkout on that runner hits this, independent of this PR. The check needs neither a cluster nor the machineshop image, so it moves to ubuntu-latest with actions/checkout@v7 -- the same setup the validate gate in stuttgart-things/flux uses. The poisoned workspace on runner-1 still wants cleaning up for whatever else lands there. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011PK5kbJhuQY3qWU21VmKD3
patrick-hermann-sva
temporarily deployed
to
k8s
August 22, 2026 09:48 — with
GitHub Actions
Inactive
patrick-hermann-sva
temporarily deployed
to
k8s
August 22, 2026 09:48 — with
GitHub Actions
Inactive
This branch was previously deployed
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.
Warum
Renovate läuft in diesem Repo (Dashboard #6 wurde zuletzt am 17.08.2026 aktualisiert), findet aber seit Monaten nichts mehr. Der letzte Renovate-PR ist #105 vom 25.07.2025.
Der
helmfile-Manager liestreleases[].version. Seit2718933(11.12.2025, „feat/update-infra") stehen die Versionen inenvironments.default.valuesund die Releases referenzieren sie per Go-Template:Ein solcher Wert wird still verworfen — kein PR, keine Warnung, kein Log-Eintrag. Betroffen waren 40 von 74
version:-Zeilen in 37 Dateien. Auf dem Dependency Dashboard sieht man es daran, dass genau diese Dateien mit leerer Dependency-Liste stehen (cicd/tekton.yaml.gotmpl,infra/ingress-nginx.yaml.gotmpl,monitoring/loki.yaml.gotmpl, …). Sichtbar blieben nur die hart kodierten Versionen, im Wesentlichen diesthings-cluster-Subcharts.Was drin ist
39
# renovate:-Annotationen in 37 Helmfiles, jeweils direkt über dem Wert, plus zweicustomManagers, die den Default in place aktualisieren:Die Annotation ist aus dem
repositories-Eintrag abgeleitet, auf den derchart:des Release zeigt: OCI-Repos werdendatasource=docker, plain HTTPS-Reposdatasource=helmmitregistryUrl. Einchart:, der selbst eineoci://-URL ist (die beiden gha-runner-Helmfiles), wird wörtlich alsdepNameübernommen. Der zweite customManager decktapps/homerun-base-stack.yaml.gotmplab, wo der Wert selbst ein Go-Template mitdefault "v0.2.1"ist.Kein
extractVersion/extractVersionTemplate: Renovate schreibt den extrahierten Wert zurück, ein abgeschnittenesvwürde Defaults erzeugen, die auf kein Tag mehr auflösen —homerun,cert-managerundvclustersind alle mitvgetaggt.Weiter in
renovate.json:fileMatch→managerFilePatterns(das war die „Config Migration Needed"-Meldung auf dem Dashboard)ignorePathsfür.k2n/**undtests/**— die k2n-Beispiele sind Generierungs-Input; ihre veralteten Kopien waren zuletzt der einzige Ort, an dem Renovatetektonüberhaupt noch sah (0.76.1, während das echte Helmfile längst auf0.77.5steht)stable-Alias auf das archiviertecharts.helm.sh/stableist rausAbsicherung gegen Rückfall:
hack/check-chart-annotations.shschlägt fehl, sobald eine getemplatete Chart-Version keine Annotation hat — eingehängt als pre-commit-Hook (damit auch intask check), alstask check-renovateund als CI-Job. Dazutask lint-renovateundtask preview-renovate. Alles inCLAUDE.mddokumentiert.Validierung
renovate --platform=local --dry-run=fullgegen den Branch:Allein aus den in der Testumgebung erreichbaren Datasources ergeben sich 11 Update-Branches, darunter argo-cd 9.4.15 → 10.x, minio 16 → 17, redis 17.1.4 → 22.x, backstage, flux-operator, gha-runner-scale-set, homerun und csi-driver-nfs.
Alle OCI-Pfade wurden vorher gegen ghcr.io aufgelöst, kein geratener
depName. Zusätzlich sauber:renovate-config-validator,shellcheck,yamllint(die 9 Annotationszeilen über 110 Zeichen sindline-length-Warnungen, in.yamllintexplizitlevel: warning) und die GitHub-Workflow-Schema-Prüfung. Negativtest des Check-Scripts gemacht: Annotation entfernt → Exit 1 mit Datei und Zeile.Noch offen (nicht Teil dieses PRs)
datasource=helm-Lookups sind hier nicht live geprüft — die Testumgebung blockiertcharts.jetstack.io,grafana.github.io,helm.cilium.iousw. auf Netzwerkebene; selbst das bestehende, produktiv funktionierendeopenldap-stack-ha„scheiterte" dort. DieregistryUrls sind wörtlich aus dem jeweiligenrepositories-Block übernommen, also dieselben URLs, die helmfile selbst benutzt. Eintask preview-renovateaus dem Firmennetz bestätigt sie in einem Durchlauf.renovate/*-Branches sind branch-protected (renovate/keycloak-24.x,renovate/nginx-19.x, …), die zugehörigen PRs wurden 2025 alsautoclosed/abandonedgeschlossen. Das ist der Grund, warum die zwei bereits gefundenen Updates auf dem Dashboard unter „Other Branches" hängen statt als PR zu erscheinen. Protection entfernen und Branches löschen.docker-registry(database/registry.yaml.gotmpl,twuni→https://helm.twun.io) wird auf dem Dashboard alsno-resultgemeldet. Die Version ist hart kodiert, hat also nichts mit den Annotationen zu tun — dort muss das Helmfile auf ein auflösbares Repository umgezogen werden. Gleiches im Auge behalten beiharbor→charts.bitnami.com/bitnami, das Bitnami zugunsten vonoci://registry-1.docker.io/bitnamichartsabwickelt.pushnur auffeature/**,feat/**,fix/**,renovate/**— dieser Branch ist nicht dabei; beipull_requestläuft er (allerdings nur beiopened/reopened, nicht beisynchronize). Bewusst nicht angefasst.🤖 Generated with Claude Code
https://claude.ai/code/session_011PK5kbJhuQY3qWU21VmKD3
Generated by Claude Code