fix(renovate): let Renovate see Bun releases (bun-v tag prefix) - #17
Conversation
Renovate has never proposed a Bun bump in this repo. The custom regex
manager extracts BUN_VERSION=1.3.10 with datasource=github-releases and
versioning=semver, but Bun tags its releases `bun-v1.4.0`, not `1.4.0`.
Under semver those tag names are not versions, so the candidate list came
back empty and Renovate silently proposed nothing:
INFO: Found no results from datasource that look like a version
(dependency=oven-sh/bun)
"result": { "releases": [] }
Kiota goes through the very same manager and does get bumped (#13, #11)
because its tags are bare `v1.34.1`, which semver accepts.
Mechanism: a bun-scoped packageRule carrying
extractVersion "^bun-v(?<version>.+)$".
Scoped rather than set on the customManager for two reasons: the manager
would also rewrite KIOTA_VERSION, and Renovate rejects the field there
outright ("Custom Manager contains disallowed fields: extractVersion"),
which aborts every run in the repo.
extractVersion also keeps the written-back value clean (`1.4.0`, not
`bun-v1.4.0`), so `bash -s "bun-v${BUN_VERSION}"` still composes.
Catch-up: BUN_VERSION 1.3.10 -> 1.4.0 in 24/ and 26/, the bump Renovate
would now open on its own.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RwXs2zuF6JC53tyzTDdJ55
|
🤖 |
There was a problem hiding this comment.
Automated PR review by tibber-agents[bot] · anthropic-claude-opus-4.8. Advisory only — humans decide whether to merge.
Summary
Correct, well-scoped fix. The root cause (Bun's bun-v tag prefix breaking github-releases + semver candidate parsing) and the mechanism (a bun-scoped extractVersion on packageRules, not on customManager) are both diagnosed accurately, and the config change leaves Kiota untouched. I independently confirmed bun-v1.4.0 exists with a bun-linux-x64.zip asset, so the reconstructed bun-v${BUN_VERSION} install line resolves. No actionable issues.
Issues
No actionable issues found.
Notes (non-blocking):
- The
extractVersionscoping is sound: it matchesmatchDatasources: ["github-releases"]andmatchDepNames: ["oven-sh/bun"], so Kiota (microsoft/kiota, barev1.34.1) is not rewritten. Because it lives onpackageRulesit applies across both24/and26/without per-directory changes. - As the description candidly notes, this repo has no CI, so nothing on this PR builds the Dockerfiles — the
1.4.0image build is unproven until Docker Hub rebuilds after merge. That is true of any bump here, not a regression from this PR.
Conventions consulted
- .agent/rubric/org-wide-instructions.md
- README.md
- catalog-info.yaml
Keeping BUN_VERSION at 1.3.10 so the next Renovate run has something to propose. With the pin already at 1.4.0 the dep resolves to `updates: []`, which is indistinguishable from the extractVersion fix not working — the mechanism would be unobservable until 1.4.1 ships. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RwXs2zuF6JC53tyzTDdJ55
|
@tibber-agents please re-review Scope reduced since your review: I reverted the catch-up bump, so this PR is now the mechanism fix only — the 6-line Reason: with the pin already at 1.4.0 the dep resolves to Worth confirming independently if you can: Renovate has updated |
There was a problem hiding this comment.
Automated PR review by tibber-agents[bot] · anthropic-claude-opus-4.8. Advisory only — humans decide whether to merge.
Summary
Re-review after scope reduction (8eeca3f → 9fee152): the catch-up BUN_VERSION bump is reverted, so this PR is now purely the mechanism fix — a single 6-line bun-scoped packageRules entry in .github/renovate.json with extractVersion: "^bun-v(?<version>.+)$". I independently confirmed the root cause the operator asked me to check: across this repo's Renovate history, app/renovate has opened PRs for microsoft/kiota (#13/#11/#7) and cimg/node (#15/#12/#8/#2) — both through the same custom manager/datasource — but has never opened a bun PR; bun landed only via human-authored #5. The bun-v tag prefix vs Kiota's bare v1.34.1 is the only difference, exactly as diagnosed, and the regex is correctly scoped by matchDepNames: ["oven-sh/bun"] so Kiota's writeback is untouched. I'm approving: this is now a minimal, single-concern config change, correct by inspection, and the decision to leave the pin stale so the next Renovate run produces observable proof is sound (with the pin already at 1.4.0 the dep resolves updates: [], indistinguishable from the fix not working).
Issues
No actionable issues found.
The reduced scope also removes the only caveat from my first review — the previously-bundled 1.4.0 image build that no CI here would exercise (this repo has no .github/workflows or .circleci/config.yml; the image builds in Docker Hub post-merge). That risk now moves to a future Renovate-authored bump PR, which is its own reviewable, revertable change — a strict improvement.
Conventions consulted
- .agent/rubric/org-wide-instructions.md
- README.md
- catalog-info.yaml
Problem
Renovate has never proposed a Bun bump in this repo. Bun has been pinned at
1.3.10(Feb 2026) while1.4.0shipped 2026-08-20. The only bun/Node PRs here (#5, #10) were human-authored features, never Renovate bumps.Root cause
The custom regex manager extracts
BUN_VERSIONwithdatasource=github-releasesandversioningTemplate: semver. But Bun tags its GitHub releases with abun-vprefix:github-releasesreturns the tag name as the version. Undersemver,bun-v1.4.0is not a version, so every candidate was filtered out and the candidate list came back empty. Renovate then had nothing to compare and proposed nothing — with no error on the Dependency Dashboard, which is why this went unnoticed.Reproduced locally with Renovate 44.42.2 against this repo at
main(renovate --platform=local --dry-run=lookup):The bun dep resolved with no
currentVersion/fixedVersionat all:{ "depName": "oven-sh/bun", "currentValue": "1.3.10", "updates": [], "warnings": [] }The control that proves it
Kiota goes through the exact same manager, datasource and versioning — and does get bumped (#13 → v1.34.1, #11 → v1.34.0). Its tags are bare
v1.34.1, which Renovate's semver accepts (leadingvtolerated). Same baseline run, Kiota resolves fully:{ "depName": "microsoft/kiota", "currentValue": "v1.34.1", "currentVersion": "v1.34.1", "fixedVersion": "v1.34.1", "updates": [] }The tag prefix is the only difference between the dep that works and the dep that never has.
The mechanism (this is the actual fix)
A bun-scoped
packageRulesentry carryingextractVersion:{ "matchDatasources": ["github-releases"], "matchDepNames": ["oven-sh/bun"], "extractVersion": "^bun-v(?<version>.+)$" }extractVersionmatters twice: it makes the candidate list parse and it controls what gets written back. Renovate writes the extracted1.4.0(notbun-v1.4.0), sobash -s "bun-v${BUN_VERSION}"keeps composing correctly.Because this is config-level, it covers
24/and26/at once — no per-directory change needed.Options considered
extractVersionon a bun-scopedpackageRuleextractVersionon thecustomManagerdatasource=npm depName=bunbun.sh/installresolves a GitHub release tag, so npm could offer a version whose GH tag isn't published yet and the image build would fail. npm also carries dailycanaryprereleases (1.4.0-canary.20260824.1) and would lean onignoreUnstabledefaults to filter them.versioning: looseon bunBUN_VERSION, producingbun-vbun-v1.4.0in the install line.Why the customManager route is rejected, verbatim
In a full run that surfaces as
WARN: Repository has invalid configandSkipping the rest to the Renovate run due to error in init phase— i.e. it would have broken all updates in this repo, Kiota and Docker included.Catch-up (separable from the mechanism)
BUN_VERSION1.3.10→1.4.0in both24/Dockerfileand26/Dockerfile— exactly the bump Renovate now proposes on its own. Revert these two lines and the mechanism still stands on its own.Confirmed
bun-linux-x64.zipexists on thebun-v1.4.0release, so the install line resolves.Verification
Renovate 44.42.2,
--platform=local --dry-run=lookup, against real GitHub datasources.1. Config validation (repo-config mode, strict):
2. Mechanism works — fix applied,
BUN_VERSIONleft at1.3.10. Both Dockerfiles produced:Note
newValue: "1.4.0"— prefix stripped, as required.3. Kiota unharmed — its resolved dep block in the fixed run is byte-identical to baseline (
currentVersion: v1.34.1,fixedVersion: v1.34.1,updates: []since it is already latest).4. Settles when current — with the catch-up applied, bun reports
currentVersion: 1.4.0,fixedVersion: 1.4.0,updates: [], and zero "no results" warnings.Not verified
This repo has no CI — no
.github/workflows, no.circleci/config.yml; the README states the image is built in Docker Hub. So nothing on this PR builds the Dockerfiles, and the1.4.0install is unproven until Docker Hub rebuilds after merge. That is equally true of any Renovate-authored bump here, so it is not a regression introduced by this PR — but it does mean no green check on this PR implies the image builds.