Skip to content

Exempt pin/pinDigest/digest from minimumReleaseAge#18

Merged
bryanbeverly merged 1 commit into
mainfrom
bryan/renovate-pin-digest-cooldown
Jun 16, 2026
Merged

Exempt pin/pinDigest/digest from minimumReleaseAge#18
bryanbeverly merged 1 commit into
mainfrom
bryan/renovate-pin-digest-cooldown

Conversation

@bryanbeverly

@bryanbeverly bryanbeverly commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a packageRule to the base renovate-config preset that sets minimumReleaseAge: null for pin, pinDigest, and digest update types.

The org-wide 3-day release-age cooldown exists to defend against newly-published malicious version releases (Axios/golang-jwt-style supply-chain attacks). Applying it to pins and digest re-pins is both unnecessary and currently broken:

  • pin / pinDigest introduce no new code — a pin locks a version the existing range already allows (and, with a lockfile, already resolves to); a digest pin captures a tag's current SHA, which is a hardening action.
  • digest re-pins have no reliable release timestamp for Renovate to age, so renovate/stability-days gets stuck pending indefinitely.

Observed impact (Jun 15 cycle)

  • ldap-verify PR#9 — grouped github-actions PR (actions/checkout digest → v6.0.3 from Jun 2, golangci-lint → v2.12.2 from May 6). Both updates are weeks/months old, yet the freshly-recomputed check still reports "Updates have not met minimum release age requirement" — a rebase did not clear it.
  • forager PR#818 — a pin PR (TS/@types/node/etc., all old releases) BLOCKED on the same stale check (forager requires the status).

What does NOT change

  • major / minor / patch version upgrades keep the full 3-day minimumReleaseAge.
  • Security/CVE updates already bypass the delay via vulnerabilityAlerts.minimumReleaseAge: null.

Residual risk

The only place this loses protection is a repo with a package.json that has no lockfile, where pinning could freeze in a freshly-published in-range version with no cooldown. Across the 16 tracked repos this is only trove (sub-packages admin/, gateway/, iap-probe/, pkg/hono-shared/, workspace/), which is low-risk and automerges. Recommended follow-up: add lockfiles to those packages (reproducible installs + constrains Renovate). Tracked in the Jira subtask.

Rollout

  • Low-risk repos (extend renovate-config-low-risk → base, untagged) pick this up immediately on merge.
  • After merge, tag v1.0.3 and bump the 11 high-risk repos #v1.0.2#v1.0.3.

Test plan

  • Merge + tag v1.0.3
  • Confirm ldap-verify PR#9 renovate/stability-days clears after next run (low-risk/untagged repos) and after high-risk bump for pinned repos
  • Confirm forager PR#818 unblocks once forager is on v1.0.3

Made with Cursor

The 3-day release-age cooldown is meant for new upstream version
releases (the Axios/golang-jwt supply-chain threat model). Applying it
to pin, pinDigest, and digest updates is both unnecessary and broken:

- pin / pinDigest introduce no new code (locking an already-allowed
  version / capturing a tag's current digest -- a hardening action).
- digest re-pins have no reliable release timestamp for Renovate to
  age, so renovate/stability-days gets stuck pending indefinitely
  (e.g. ldap-verify #9, forager #818 -- both blocked on stale checks
  despite all deps being weeks/months old).

Real version upgrades (major/minor/patch) keep the 3-day delay, and
security updates continue to bypass it via vulnerabilityAlerts.

Co-authored-by: Cursor <cursoragent@cursor.com>
@bryanbeverly bryanbeverly force-pushed the bryan/renovate-pin-digest-cooldown branch from 10bedb9 to 922f65b Compare June 16, 2026 18:45
@bryanbeverly bryanbeverly merged commit 6ef8ece into main Jun 16, 2026
2 checks passed
@bryanbeverly bryanbeverly deleted the bryan/renovate-pin-digest-cooldown branch June 16, 2026 18:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants