feat: renovate watches the 32 chart pins it could not see - #29
Merged
Conversation
Every chart version in this repo is pinned inside an install.sh, because explicit install scripts are the point. Renovate ships no manager that reads a version out of a shell script, so adopting the shared preset gave this repo a renovate.json that covered none of its actual version surface. Thirty-two pins, watched by nothing. mirror-check.py catches part of it by comparing kx against eks-gitops, but it skips anything declared kx-only in stack/upstream.json — so argo-cd, cloudnative-pg, ingress-nginx, kube-prometheus-stack, minio, nats and trust-manager had no currency instrument at all. argo-cd sits on chart 9.5.14 against 10.2.3: a full chart major, 22 releases, and nothing anywhere would have said so. Two customManagers close it — one for `helm repo add` + `alias/chart`, one for charts pulled straight from OCI, which have no repo line. The URL and the chart can be captured separately without a backreference because each install.sh adds exactly one repo; Renovate's engine is RE2 and has none. The fix moves the pins nowhere. Teaching Renovate the shape this repo already uses is the right direction, given CLAUDE.md says not to add helm wrappers or "easier" automation. ─── The gate ─── A customManager whose regex matches nothing is valid config that watches nothing, and renovate-config-validator passes it: the schema is fine and the pattern is never run against a file. So scripts/check-renovate-coverage.py reads the matchStrings out of renovate.json — the shipped ones, not a copy — applies them to the tree, and fails on any pin left unmatched. Edit the regex and break coverage, and CI says so. It also rejects lookaround and backreferences. Those are legal in Python's `re` and absent from RE2, so a pattern using one would pass a local check and match nothing in production. Relatedly it translates `(?<name>)` to `(?P<name>)` to run RE2 syntax under Python — done only after the lookbehind forms are rejected, since otherwise the translation would turn `(?<=` into a group named `=`. Proven red three ways before being trusted: an addon whose shape no matchString covers, customManagers deleted outright, and a matchString edited to contain a lookahead. Green on the tree as it stands, listing all 32 pins it matched.
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.
Adopting the shared Renovate preset gave this repo a
renovate.jsonthat covered none of its actual version surface.Every chart version here is pinned inside an
install.sh, because explicit install scripts are the point (CLAUDE.md: don't add helm wrappers or "easier" automation). Renovate ships no manager that reads a version out of a shell script.What was unwatched
32 chart pins, zero visible to Renovate.
mirror-check.pycatches part of it by comparing kx against eks-gitops, but it skips anything declared kx-only instack/upstream.json. That leaves seven charts with no currency instrument at all:argo-cd·cloudnative-pg·ingress-nginx·kube-prometheus-stack·minio·nats·trust-managerargo-cdsits on chart 9.5.14 against 10.2.3 — a full chart major, 22 releases — and nothing anywhere would have said so.The fix moves no pins
Two
customManagers: one forhelm repo add+alias/chart, one for charts pulled straight from OCI (which have no repo line). The registry URL and the chart are captured separately without a backreference, which works because eachinstall.shadds exactly one repo — Renovate's engine is RE2 and has no backreferences.The gate, because the config alone proves nothing
A customManager whose regex matches nothing is valid config that watches nothing.
renovate-config-validatorpasses it — the schema is fine and the pattern is never run against a file. That is the same defect this PR is fixing, one level up.So
scripts/check-renovate-coverage.pyreads thematchStringsout ofrenovate.json— the shipped ones, not a copy — applies them to the tree, and fails on any pin left unmatched. Edit the regex and break coverage, and CI says so.It also rejects lookaround and backreferences, which are legal in Python's
reand absent from RE2: a pattern using one would pass a local check and match nothing in production. Relatedly it translates(?<name>)→(?P<name>)to run RE2 syntax under Python, and does so only after rejecting the lookbehind forms — otherwise the translation turns(?<=into a group named=. That ordering is commented at the line.Verification
Proven red before being trusted:
customManagersdeleted outrightshellcheckandyamllintboth clean. The new job is in the merge gate'sneeds, so it is blocking.Expect a
kx-stack-chartsPR from Renovate on the next run — that backlog is the point, andargo-cd9.5.14 → 10.2.3 wants reading before it lands.