chore(ci): give every pinned version one place Renovate can see - #284
Merged
Conversation
The Node version was written out four times as a `node-version: 24` literal, which no Renovate manager reads — it could only ever drift. It now lives in .nvmrc, which the nvm manager does update, and every job picks it up through a local composite action instead of repeating the setup block. renovate.json's `constraints` said node 24 while package.json engines said >=22. Renovate believes the constraint, so it was free to pick a dependency the declared floor cannot run — the exact thing the @types/node rule right below it exists to prevent. Dropped, so the constraint comes from engines and there is one floor again. Also unifies the base-path resolution the deploy and the PR preview each carried their own copy of, and refreshes the FORCE_JAVASCRIPT_ACTIONS comment: its migration date has passed, but both nested actions still declare `using: node20`, so the flag stays.
|
This was referenced Sep 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Reviewing where versions are written down: the Node version was a
node-version: 24literal in three workflows (four jobs). No Renovate manager reads that key, so it could only ever drift away from everything else.What
.nvmrcholds the Node version. Renovate'snvmmanager updates it, and every job reads it through a new local composite action,.github/actions/node-setup(setup-node +npm ci) — one declaration instead of four.renovate.jsondropsconstraints. It saidnode: 24whilepackage.jsonengines says>=22. Renovate believes the constraint, so it was free to pick a dependency the declared floor cannot run — precisely what the@types/noderule directly below it exists to prevent. Without it the constraint comes fromengines, and there is one floor again. Thenpm: "12"half went too: nothing else in the repo names an npm version, and a hand-written major there is a second unverified source of truth..github/actions/base-pathreplaces the base-path resolution thatdeploy.ymlandpreview.ymleach carried a near-identical copy of; the preview passes its subdirectory as an input.FORCE_JAVASCRIPT_ACTIONS_TO_NODE24comment described a migration date that has now passed. Checked upstream:rossjrw/pr-preview-action@v1.8.1still pins two actions that declareusing: node20, so the flag stays — the comment now says why, and that Renovate bumping the action won't tell us when it can go.Version inventory after this
package.jsondeps + devDepsengines.node.nvmrc@playwright/testNo
node-version:literals remain.