Skip to content

fix(renovate): make templated chart versions visible again - #158

Merged
patrick-hermann-sva merged 2 commits into
mainfrom
claude/renovate-helm-repo-owruyk
Aug 22, 2026
Merged

patrick-hermann-sva merged 2 commits into
mainfrom
claude/renovate-helm-repo-owruyk

Conversation

@patrick-hermann-sva

Copy link
Copy Markdown
Contributor

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 liest releases[].version. Seit 2718933 (11.12.2025, „feat/update-infra") stehen die Versionen in environments.default.values und die Releases referenzieren sie per Go-Template:

releases:
  - chart: stuttgart-things/tekton
    version: {{ .Values.version }}   # -> skipReason: contains-variable

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 die sthings-cluster-Subcharts.

Was drin ist

39 # renovate:-Annotationen in 37 Helmfiles, jeweils direkt über dem Wert, plus zwei customManagers, die den Default in place aktualisieren:

environments:
  default:
    values:
      # renovate: datasource=docker depName=ghcr.io/argoproj/argo-helm/argo-cd
      - version: 9.4.15

Die Annotation ist aus dem repositories-Eintrag abgeleitet, auf den der chart: des Release zeigt: OCI-Repos werden datasource=docker, plain HTTPS-Repos datasource=helm mit registryUrl. Ein chart:, der selbst eine oci://-URL ist (die beiden gha-runner-Helmfiles), wird wörtlich als depName übernommen. Der zweite customManager deckt apps/homerun-base-stack.yaml.gotmpl ab, wo der Wert selbst ein Go-Template mit default "v0.2.1" ist.

Kein extractVersion / extractVersionTemplate: Renovate schreibt den extrahierten Wert zurück, ein abgeschnittenes v würde Defaults erzeugen, die auf kein Tag mehr auflösen — homerun, cert-manager und vcluster sind alle mit v getaggt.

Weiter in renovate.json:

  • fileMatch → managerFilePatterns (das war die „Config Migration Needed"-Meldung auf dem Dashboard)
  • ignorePaths für .k2n/** und tests/** — die k2n-Beispiele sind Generierungs-Input; ihre veralteten Kopien waren zuletzt der einzige Ort, an dem Renovate tekton überhaupt noch sah (0.76.1, während das echte Helmfile längst auf 0.77.5 steht)
  • der ungenutzte stable-Alias auf das archivierte charts.helm.sh/stable ist raus

Absicherung gegen Rückfall: hack/check-chart-annotations.sh schlägt fehl, sobald eine getemplatete Chart-Version keine Annotation hat — eingehängt als pre-commit-Hook (damit auch in task check), als task check-renovate und als CI-Job. Dazu task lint-renovate und task preview-renovate. Alles in CLAUDE.md dokumentiert.

Validierung

renovate --platform=local --dry-run=full gegen den Branch:

helmfile: 43 Dateien, 72 Deps
regex:    37 Dateien, 39 Deps      (vorher: 0)

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 sind line-length-Warnungen, in .yamllint explizit level: 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)

  1. Die datasource=helm-Lookups sind hier nicht live geprüft — die Testumgebung blockiert charts.jetstack.io, grafana.github.io, helm.cilium.io usw. auf Netzwerkebene; selbst das bestehende, produktiv funktionierende openldap-stack-ha „scheiterte" dort. Die registryUrls sind wörtlich aus dem jeweiligen repositories-Block übernommen, also dieselben URLs, die helmfile selbst benutzt. Ein task preview-renovate aus dem Firmennetz bestätigt sie in einem Durchlauf.
  2. Die alten renovate/*-Branches sind branch-protected (renovate/keycloak-24.x, renovate/nginx-19.x, …), die zugehörigen PRs wurden 2025 als autoclosed/abandoned geschlossen. 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.
  3. docker-registry (database/registry.yaml.gotmpl, twuni → https://helm.twun.io) wird auf dem Dashboard als no-result gemeldet. 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 bei harbor → charts.bitnami.com/bitnami, das Bitnami zugunsten von oci://registry-1.docker.io/bitnamicharts abwickelt.
  4. CI-Trigger: der Workflow feuert bei push nur auf feature/**, feat/**, fix/**, renovate/** — dieser Branch ist nicht dabei; bei pull_request läuft er (allerdings nur bei opened/reopened, nicht bei synchronize). Bewusst nicht angefasst.

🤖 Generated with Claude Code

https://claude.ai/code/session_011PK5kbJhuQY3qWU21VmKD3


Generated by Claude Code

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
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
patrick-hermann-sva merged commit f4e4f8e into main Aug 22, 2026
3 checks passed

This branch was previously deployed

1 inactive deployment
k8s — 3c3d4bfc Deployed Aug 22, 2026 by patrick-hermann-sva via Analyze-Changed-Charts #253
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.

2 participants