Skip to content

build: update Node.js to v26 and pnpm to v12 - #203

Merged
dangreen merged 2 commits into
mainfrom
build/node-26
Oct 6, 2026
Merged

dangreen merged 2 commits into
mainfrom
build/node-26

Conversation

@dangreen

@dangreen dangreen commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Why

The repository was developed on Node.js 22.23.0 and pnpm 11.9.0, and CI ran on Node.js 22, apart from the release job on 24, with pnpm 11.11.0. Node.js 26 is the latest release line and becomes an LTS on 2026-10-28, while the packages keep supporting Node.js 22 until its end of life on 2027-04-30.

pnpm 12 is the latest release, and its breaking changes leave the workspace alone: pnpm 12 recognizes every setting of pnpm-workspace.yaml, nothing passes --frozen-lockfile false, no dependency comes from git, and engineStrict is off. The one change it asks for is in the lockfile: pnpm 12, like pnpm 11.28, compares the publishConfig.linkDirectory of a package with the lockfile, so a frozen install of the old lockfile fails with ERR_PNPM_OUTDATED_LOCKFILE.

What

  • .tool-versions pins Node.js 26.10.0, the latest 26, and pnpm 12.9.1, the version of the latest tag. Every actions/setup-node step reads Node.js through node-version-file, so a bump of the file moves local development and CI together, and every pnpm/action-setup step asks for pnpm 12.
  • The unit job runs on a matrix of Node.js 22, the floor the packages declare, and the version of .tool-versions, and uploads coverage from the latter alone.
  • The lockfile records linkDirectory: false for the 8 packages whose publishConfig sets it, the way pnpm 12 writes it, and nothing else. pnpm 12 finds it up to date with these lines alone, and a plain install changes nothing.

Notes

  • Not breaking: engines.node stays >=22 in the packages and the root, so nothing gets released. @types/node already stays on ^22, the floor, so the types catch an API of a newer Node.js.
  • The unit check now reports as unit (22) and unit (.tool-versions). No branch protection or ruleset requires the old name.
  • minimumReleaseAge has applied since pnpm 11, so the move to 12 changes nothing about it, and minimumReleaseAgeExclude stays as it is.
  • Checked on Node.js 26.10.0: the workflows parse, a frozen install from scratch on pnpm 11.9.0 and on pnpm 12.9.1 gives no engine warnings, a plain install on pnpm 12 leaves the lockfile alone, lint of core, config and npm passes, the unit tests of core and config pass, on pnpm 12 the build of core through pnpm run triggers no install before the script, and lint-package-json passes through pnpm dlx on both versions of pnpm.
  • The Renovate PRs chore(deps): update dependency @types/node to v24 #127, chore(deps): update node.js to v22.23.3 - autoclosed #86, chore(deps): update dependency pnpm to v12.11.2 #200 and chore(deps): update dependency pnpm to v11.28.5 - autoclosed #162, which bump Node.js and pnpm, become obsolete.

Pin Node.js 26.10.0 in `.tool-versions` and make every CI job read it. The unit job also
runs on Node.js 22, the floor of `engines`, which stays as it is.
@coveralls

coveralls commented Oct 6, 2026 •

Copy link
Copy Markdown

Coverage Report for CI Build 37502926889

Coverage remained the same at 69.769%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 1046
Covered Lines: 725
Line Coverage: 69.31%
Relevant Branches: 211
Covered Branches: 152
Branch Coverage: 72.04%
Branches in Coverage %: Yes
Coverage Strength: 10.93 hits per line

💛 - Coveralls

Pin pnpm 12.9.1 and ask CI for pnpm 12. Settings need no migration from pnpm 11. The lockfile
records `linkDirectory: false` of the 8 packages that set it, which a frozen install of pnpm 12
checks, and pnpm 12 finds it up to date with that alone.
@dangreen dangreen changed the title build: update Node.js to v26 build: update Node.js to v26 and pnpm to v12 Oct 6, 2026
@dangreen
dangreen merged commit 3d075e7 into main Oct 6, 2026
12 checks passed
@dangreen
dangreen deleted the build/node-26 branch October 6, 2026 17:41
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