Skip to content

chore(ci): give every pinned version one place Renovate can see - #284

Merged
JanWelker merged 1 commit into
mainfrom
chore/renovate-catches-every-version
Sep 5, 2026
Merged

chore(ci): give every pinned version one place Renovate can see#284
JanWelker merged 1 commit into
mainfrom
chore/renovate-catches-every-version

Conversation

@JanWelker

Copy link
Copy Markdown
Owner

Why

Reviewing where versions are written down: the Node version was a node-version: 24 literal in three workflows (four jobs). No Renovate manager reads that key, so it could only ever drift away from everything else.

What

  • .nvmrc holds the Node version. Renovate's nvm manager 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.json drops constraints. It said node: 24 while package.json engines says >=22. Renovate believes the constraint, so it was free to pick a dependency the declared floor cannot run — precisely what the @types/node rule directly below it exists to prevent. Without it the constraint comes from engines, and there is one floor again. The npm: "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-path replaces the base-path resolution that deploy.yml and preview.yml each carried a near-identical copy of; the preview passes its subdirectory as an input.
  • The FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 comment described a migration date that has now passed. Checked upstream: rossjrw/pr-preview-action@v1.8.1 still pins two actions that declare using: 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

Where Managed by
package.json deps + devDeps Renovate npm manager
engines.node source of truth for the constraint
.nvmrc Renovate nvm manager
action digests (workflows + both composite actions) Renovate github-actions manager, pinned to digest with a semver comment
Playwright browsers derived from @playwright/test

No node-version: literals remain.

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.
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-09-05 10:59 UTC

@JanWelker
JanWelker merged commit 113ad91 into main Sep 5, 2026
6 of 7 checks passed
@JanWelker
JanWelker deleted the chore/renovate-catches-every-version branch September 5, 2026 10:58
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.

1 participant