Skip to content

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

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 alone. 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. That is also why #54 pinned CI to pnpm 11.9.0.

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 instead of the 11.9.0 pinned in build: limit concurrency of workspace scripts to CPU cores #54.
  • 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 4 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.
  • A full re-resolution of the lockfile would also move @typescript/native-preview, which the root takes at latest, from 7.0.0-dev.20260624.1 to 7.0.0-dev.20260707.2. The lockfile leaves that out.
  • 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.
  • 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, the unit tests and lint of child-process-utils, stream-utils and hosted-git-info pass, on pnpm 12 the build of child-process-utils through pnpm run triggers no install before the script and its types pass, and lint-package-json passes through pnpm dlx on both versions of pnpm.
  • The Renovate PRs chore(deps): update dependency @types/node to v24 #28, chore(deps): update node.js to v22.23.3 - autoclosed #2 and chore(deps): update dependency pnpm to v11.28.5 - autoclosed #45, 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.
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 4 packages that set it, which a frozen install of pnpm 12
checks, and pnpm 12 finds it up to date with that alone.
@coveralls

coveralls commented Oct 6, 2026 •

Copy link
Copy Markdown

Coverage Report for CI Build 37502983851

Coverage remained the same at 81.35%

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: 175
Covered Lines: 152
Line Coverage: 86.86%
Relevant Branches: 136
Covered Branches: 101
Branch Coverage: 74.26%
Branches in Coverage %: Yes
Coverage Strength: 46.36 hits per line

💛 - Coveralls

@dangreen dangreen mentioned this pull request Oct 6, 2026
@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 f98835b into main Oct 6, 2026
12 checks passed
@dangreen
dangreen deleted the build/node-26 branch October 6, 2026 17:43
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