fix: Renovate could not look up any of the CI-pinned tools - #9
Merged
Conversation
added 2 commits
July 30, 2026 23:25
Renovate reported, on its first run against this repo:
Failed to look up github-releases package ci-pinned-tools: no-result
Files affected: .github/workflows/ci.yml
My bug, and three separate ones behind that single message.
1. `depNameTemplate: "ci-pinned-tools"` was a name I invented. A
datasource lookup needs a real package, so Renovate dutifully asked
GitHub for a repository called `ci-pinned-tools` and got nothing. The
depName is now CAPTURED from the URL — `gitleaks/gitleaks`,
`trufflesecurity/trufflehog` — rather than templated to a constant.
2. `markdownlint-cli` arrives via `npx`, so it is an npm package. It was
pointed at the github-releases datasource, which could never have
resolved it whatever the name.
3. lychee tags its releases `lychee-vX.Y.Z`, not `vX.Y.Z`. A single
matchString covering all three tarballs would have mis-parsed it, so
it gets its own manager plus an `extractVersionTemplate` to recover
the bare version from the tag.
Net effect of the bug: all five pinned tools — gitleaks, trufflehog,
lychee (twice) and markdownlint-cli — were unmanaged while the config
looked like it was managing them. That is the same failure mode as the
`fileMatch`/`matchPackagePatterns` options this file already had removed:
configuration that reads as coverage and provides none.
Verified by running each regex against the real ci.yml rather than
reasoning about it:
github-releases -> gitleaks/gitleaks 8.30.1
trufflesecurity/trufflehog 3.96.0
github-releases -> lycheeverse/lychee 0.24.2
npm -> markdownlint-cli 0.45.0
Also converted renovate.json -> renovate.json5. Renovate reads it
natively, and the reasoning above is worth keeping next to the regexes —
plain JSON has no comment syntax, and the `_comment` key workaround trips
Renovate's unknown-option validation. Validated with a real JSON5 parser
against Renovate's published schema, after the first hand-rolled
comment-stripper I tried silently mangled an inline key.
Added a "CI pinned tools" package rule so these arrive as one grouped PR
rather than five.
.gitattributes export-ignore and .github/CODEOWNERS both still named the
old file. The CODEOWNERS one matters more than it looks: GitHub silently
ignores a pattern that matches nothing, so the entry would have read as
review protection on the Renovate config while providing none.
Caught by tools/check_discoverability.py, which asserts every CODEOWNERS
pattern matches something — a check added earlier for exactly this, after
two other entries had rotted the same way. It reported:
FAIL every CODEOWNERS pattern matches something — dead: ['renovate.json']
so the discoverability job on this PR would have failed had I pushed it.
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.
Renovate reported, on its first run against this repo:
My bug, and three separate ones behind that single message.
depNameTemplate: "ci-pinned-tools"was a name I invented. Adatasource lookup needs a real package, so Renovate dutifully asked
GitHub for a repository called
ci-pinned-toolsand got nothing. ThedepName is now CAPTURED from the URL —
gitleaks/gitleaks,trufflesecurity/trufflehog— rather than templated to a constant.markdownlint-cliarrives vianpx, so it is an npm package. It waspointed at the github-releases datasource, which could never have
resolved it whatever the name.
lychee tags its releases
lychee-vX.Y.Z, notvX.Y.Z. A singlematchString covering all three tarballs would have mis-parsed it, so
it gets its own manager plus an
extractVersionTemplateto recoverthe bare version from the tag.
Net effect of the bug: all five pinned tools — gitleaks, trufflehog,
lychee (twice) and markdownlint-cli — were unmanaged while the config
looked like it was managing them. That is the same failure mode as the
fileMatch/matchPackagePatternsoptions this file already had removed:configuration that reads as coverage and provides none.
Verified by running each regex against the real ci.yml rather than
reasoning about it:
Also converted renovate.json -> renovate.json5. Renovate reads it
natively, and the reasoning above is worth keeping next to the regexes —
plain JSON has no comment syntax, and the
_commentkey workaround tripsRenovate's unknown-option validation. Validated with a real JSON5 parser
against Renovate's published schema, after the first hand-rolled
comment-stripper I tried silently mangled an inline key.
Added a "CI pinned tools" package rule so these arrive as one grouped PR
rather than five.