fix(renovate): stop the docker datasource stalling in Pending Status Checks #91
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!91
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "fix/renovate-docker-release-timestamp"
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?
The defect
minimumReleaseAgeBehaviourdefaults totimestamp-required(Renovate's own schema: enumtimestamp-required/timestamp-optional, defaulttimestamp-required). Renovate's dockerdatasource often returns no
releaseTimestamp, and a check that needs a timestamp can never passwithout one. So the update is deferred on every run and the branch is never created.
The Dependency Dashboard lists it under "Pending Status Checks" with an
approvePr-branchaction, which reads as though a branch already exists. Nothing logs an error at
info.Three things made this hard to see:
prCreationat itsimmediatedefault thesection can only mean an unmet internal check.
prHourlyLimitand never appears under "Rate-Limited". Two updates rate-limited and seven pendingwere two separate gates, not one phenomenon.
absent, so checking the registry's own dates and finding them old is not evidence the update will
ever be offered.
Measured
On
bitborg-infra, 2026-08-17, seven image updates were held this way:codeberg.org/forgejo/forgejo16.0.2-rootlessdocker.io/grafana/loki3.7.6docker.io/victoriametrics/victoria-metricsv1.149.0docker.io/victoriametrics/vmagentv1.149.0docker.io/victoriametrics/vmalertv1.149.0docker.io/library/postgres17.11-trixiequay.io/prometheus/alertmanagerv0.34.0Every one satisfies the 3-day quarantine except
alertmanager, and that one is held for the samereason as the rest, not for its age.
docker.io/grafana/alloyopened a PR in the same run from thesame defaults file as the held
vmagent, which is what rules out the manager, the file, thedatasource and the update type.
Renovate names the cause itself at
debug:The change
One
packageRule, scoped tomatchDatasources: ["docker"]. Datasources that do supply timestampskeep failing closed, so the quarantine still applies wherever it can actually be evaluated.
The trade-off is deliberate and worth stating plainly: for images whose timestamp never arrives, the
3-day supply-chain quarantine stops applying. It was not protecting those images before, it was
permanently blocking them, which is the worse of the two failures for the git server and the
database. Image-tag bumps are never automerged, so a human still reviews every one. The bypass is
also not silent: Renovate logs a WARN at
infonaming the releases it proceeded on, so a skippedquarantine is visible in the logs without raising the log level.
Verified
Reproduced with
platform=local,RENOVATE_DRY_RUN=fullandLOG_LEVEL=debugon renovate43.288.0, the version production runs. No production access, no token, no Ansible apply.
Marking N release(s) as pending ... timestamp-requireddecisions, naming exactlythe seven dashboard entries and nothing else.
gated
postgresmajor.renovate-config-validatoraccepts the option insidepackageRules, and rejects adeliberately typo'd option name, so that check was shown able to fail.
pnpm format:checkandpnpm mdlintclean.Reviewer note: the validator checks option names but not enum values. A bogus
minimumReleaseAgeBehaviour: "totally-bogus-value"passes it withConfig validated successfully. The behavioural run above is what proves the value is honoured.Deployment
None needed. Renovate resolves this preset from
mainat run time, so merging is the wholedeployment and it takes effect on the next run. The debug-logging apply planned in
bitborg/bitborg-infra#430 is no longer required.
Refs bitborg/bitborg-infra#430, bitborg/bitborg-infra#332