Skip to content

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

Merged
dangreen merged 2 commits into
masterfrom
build/node-26-pnpm-12
Oct 6, 2026
Merged

dangreen merged 2 commits into
masterfrom
build/node-26-pnpm-12

Conversation

@dangreen

@dangreen dangreen commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Why

The repository was developed on Node.js 24.17.0 and pnpm 11.9.0, and CI ran on Node.js 24 alone, so nothing checked the floor of engines.node, >=22. Node.js 26 is the latest release line and becomes an LTS on 2026-10-28, while the package keeps 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 repository 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 the package with the lockfile, so a frozen install of the old lockfile fails with ERR_PNPM_OUTDATED_LOCKFILE. CI on master fails that way already, since version: 11 brings pnpm 11.28.

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 of engines, and the version of .tool-versions, and uploads coverage from the latter alone.
  • @types/node goes from ^24 back to ^22, the floor, so the types catch an API of a newer Node.js. The lockfile moves it from 24.13.3 to 22.20.5, with undici-types along, and re-keys the peer variants that take it.
  • The lockfile records linkDirectory: false of the package, the way pnpm 12 writes it. pnpm 12 finds it up to date with this line, and a plain install changes nothing.

Notes

  • Not breaking: engines.node stays >=22, so nothing gets released.
  • Renovate keeps no rule for @types/node, so it is going to offer ^24 again.
  • 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 passes, the types pass on @types/node 22, the unit tests pass on Node.js 26 and 22, the build passes and size-limit measures the same 855 B as on Node.js 24, on pnpm 12 pnpm run emitDeclarations 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 pnpm to v12.14.0 #401, chore(deps): update dependency pnpm to v11.28.5 - autoclosed #382 and chore(deps): update dependency @types/node to v24 #383, which bump pnpm and Node.js, 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, and `@types/node` goes
back to `^22` to match that floor.
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 package, which a frozen install of pnpm 12 checks, and
pnpm 12 finds it up to date with that alone.
@codecov

codecov Bot commented Oct 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.47%. Comparing base (db489d8) to head (2679393).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #403   +/-   ##
=======================================
  Coverage   98.47%   98.47%           
=======================================
  Files           5        5           
  Lines         131      131           
  Branches       35       35           
=======================================
  Hits          129      129           
  Misses          2        2           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dangreen
dangreen merged commit 4a15bc0 into master Oct 6, 2026
9 checks passed
@dangreen
dangreen deleted the build/node-26-pnpm-12 branch October 6, 2026 19:04
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