ci: hoist Renovate's release-age gate to global; disable pnpm's own #59
No reviewers
Labels
No labels
dependencies
major
security-pin
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
trails-cool/trails!59
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/release-age-policy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Two changes to one policy area, prompted by #38 failing
pnpm iboth with and without--frozen-lockfile.What was actually wrong
pnpm 11 enforces a 24-hour minimum release age on lockfile entries by default. It is invisible to
pnpm config get minimumReleaseAge(returnsundefined) and appears in no npmrc. Measured empirically as exactly 1440 minutes, with the cutoff trackingnow − 24hacross two runs a day apart.#38's lockfile contained
playwright/playwright-core@1.62.1, published hours before the branch was built:So pnpm refused to install it for a full 24 hours — CI red the whole time, with nothing actually wrong.
Renovate was not at fault
Worth stating plainly, because it was my first assumption and it was wrong. #38's own PR body says
playwright 1.61.1 → 1.62.0, and the lockfile contains 1.62.0 as proposed. Renovate honoured its three-day gate.The
1.62.1entries arrived afterwards, from our ownpnpm dedupepostUpgradeTask re-resolving^1.61.1to the newest in-range version — a resolution Renovate neither proposed nor age-checked. The lock ends up containing both:So hoisting the Renovate setting does not fix this case. It is worth doing on its own merits, and the config now records which gap it leaves rather than implying coverage it does not have.
Changes
renovate.json5—minimumReleaseAge: "3 days"moves from the auto-mergepackageRuleto the top level, so it gates every proposed update including majors, not only auto-mergeable minor/patch.pnpm-workspace.yaml—minimumReleaseAge: 0, disabling pnpm's default. It fires at install time rather than resolve time, so it never prevents a too-fresh entry being written — only from being used, a day late.The trade
We lose a guard against installing a just-published compromised release. The path that matters stays covered, and more strictly: three days for everything Renovate proposes versus pnpm's 24 hours.
Transitive versions pulled in by
pnpm dedupeare covered by neither. If that gap ever bites, the right fix is constraining dedupe — not re-enabling a check that fires after the fact.Verified
On #38's branch, 82 minutes before its window would have expired naturally:
exit=1—ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATIONminimumReleaseAge: 0exit=0— "Done in 1s using pnpm v11.18.0"Config checks:
renovate.json5parses with the setting at top level and zero rule-scoped copies, auto-merge rule otherwise intact (squash/conflicted/minor,patch,pin,digest);pnpm-workspace.yamlhas exactly one occurrence and no duplicate mapping key.pnpm-lock.yamldeliberately untouched.Note on #38 itself
It needs no change — its window expires at 16:36 UTC today and it would then install on its own. This PR stops the next one costing a day.