chore(renovate): add opt-in automerge preset, group toolchain, batch weekly #81
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-docs!81
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "chore/renovate-automerge-preset"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Renovate was opening ~18 PRs at a time across the estate, and almost all of it was fan-out
rather than genuinely new work: every repo pins an identical Node/pnpm toolchain, so one
upstream pnpm release produced one near-identical PR per repo.
Volume
toolchaingroup now spans both datasources. The oldtoolchain (volta)rule matchednodeandpnpm, but every service repo pins Node twice — once inpackage.jsonvoltaand once as the Containerfile base image (
docker.io/library/node), which is a differentdepName from a different datasource. So the group caught the Volta pin and let the container
pin open its own PR. Beyond the extra PR, that meant nothing kept the two Node pins in step
and they could silently drift to different versions. Renamed to
toolchainbecause "volta"is no longer accurate.
schedule: before 6am on monday), matching theexisting
lockFileMaintenancewindow, instead of trickling in daily.prConcurrentLimit/prHourlyLimitstated explicitly rather than relying on Renovate'sdefaults of 10/2.
The security path is untouched:
vulnerabilityAlertsalready overrides bothscheduleandminimumReleaseAge, so vulnerability fixes still land immediately.Automerge
New named preset
automerge-safe.json, referenced aslocal>bitborg/bitborg-docs:automerge-safe. It automerges non-major devDependencies, thetoolchain group, and the weekly lockfile PR — via
automergeType: pr+platformAutomerge,so Forgejo does the merging once the required
cicheck passes.It is opt-in, and deliberately so. Extending it is an assertion that a merge to that repo's
default branch ships nothing to production. Two repos are excluded, with the reasoning recorded
in their own
renovate.jsonso it does not have to be re-derived later:bitborg-web— a merge tomainis a deploy.deploy.ymlfires on push tomain,builds the image, and the services host pulls it via
podman auto-update(ADR 0019) with nooperator present. CI is a strong gate and a failed healthcheck rolls the container back, but
neither proves a bumped dependency left the served portal behaving the same.
bitborg-infra— counterintuitively, because merging triggers nothing. ThecustomManagersbump*_image_tagvalues ingroup_vars, i.e. declared production statethat reaches prod on the next Ansible apply — quite possibly run for an unrelated reason by
someone who never reviewed the bump. Compounded by #63, where a tag bump can no-op without a
pull+restart, so the running version does not reveal what happened either.
Opting in from each repo's side, rather than listing repositories here with
matchRepositories, keeps the policy defined exactly once while keeping this public file freeof any repository inventory. It also fails safe: a newly onboarded repo does not automerge until
someone has actually reasoned about its deploy path.
The toolchain automerge rule matches by depName, mirroring the group, not by
matchDepTypes: [volta, packageManager]. The group spans two managers so its members carrydifferent depTypes, and a depType-only rule would mark part of a single grouped branch
automergeable while leaving the container pin out — forcing Renovate to derive one branch config
from conflicting
automergevalues. The two depName lists are cross-referenced in both files.Majors are unaffected throughout: still held by
major.dependencyDashboardApproval, andexcluded from every automerge rule, since ticking that box means "open the PR for me to look at",
not "ship it unreviewed".
Verification
renovate-config-validatorpasses on all three files, plus the six consumingrenovate.jsonfiles on their own branches. Prettier clean. Branch protection was confirmed to require the
cistatus check in every repo — that is the load-bearing precondition, since
automergemerges onRenovate's view of checks.
Not provable locally: that platform automerge works on Forgejo 16.0.1 (Renovate falls back to
merging itself if it does not, so the effect holds either way), and that the group captures
docker.io/library/nodeat runtime — though branchrenovate/docker.io-library-node-24.xconfirms that depName. The real proof is the next Monday run.
Merge order
This must merge before the six repos that reference the new preset, otherwise
local>bitborg/bitborg-docs:automerge-safewill not resolve for them.Afterwards the seven open
renovate/toolchain-(volta)PRs become orphaned by the group renameand can be closed; new
renovate/toolchainbranches supersede them.Follow-ups this makes more pressing
Both already filed and both now matter more, since less human attention flows through these PRs:
the missing github.com PAT (#12) means automerged PRs carry no changelog anyone could have read,
and the absent Renovate staleness alert means a bot that has stopped entirely is invisible —
and less likely to be noticed by the absence of PRs, since nobody is watching for them.
a5c2dd061e4c795c0aac