ci(gh-actions): drop node 20 and add node 24 - #2656
Merged
Merged
Conversation
The test matrix has run only 22.x for a while, and many devDependencies already require node >=22 -- npm ci on Node 20 emits EBADENGINE warnings for 47 packages on main today. Keeping release and semantic on 20.x meant those two workflows were the only ones still on an unsupported version. Moves release.yml and semantic.yml to 22.x, raises engines.node to >=22, and adds 24.x to the test matrix. Verified locally on Node v24.9.0: npm ci installs with no EBADENGINE warnings, 92 test files and 969 tests pass, and the tsc build is clean -- on both current main (vitest 4) and the vitest 5 branch in #2654. node.js.yml still has two steps gated on matrix.node-version == '20.x' (ci-prettify and the codecov upload) that have therefore never run. Left as-is here because re-enabling ci-prettify fails on 10 drifted files; separate PR.
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The changes are limited to CI and engine-version declarations and are internally consistent with the stated goal of dropping Node 20 and adding Node 24 to testing.
Pull request overview
This PR updates the repository’s supported and CI-tested Node.js versions to align with current dependency engine requirements and eliminate Node 20 usage in GitHub Actions workflows.
Changes:
- Bump
package.jsonengines.nodefrom>=20to>=22. - Update
release.ymlandsemantic.ymlworkflows to use Node.js22.xinstead of20.x. - Expand the CI matrix in
node.js.ymlto test on Node.js22.xand24.x.
File summaries
| File | Description |
|---|---|
package.json |
Raises the declared minimum Node.js engine version to >=22. |
.github/workflows/semantic.yml |
Switches the PR/commit validation job from Node 20.x to 22.x. |
.github/workflows/release.yml |
Switches the release workflow from Node 20.x to 22.x. |
.github/workflows/node.js.yml |
Adds Node 24.x to the test matrix alongside 22.x. |
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
rsdmike
approved these changes
Sep 8, 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.
Drops Node 20 and adds Node 24 to the test matrix.
Why drop 20
The test matrix has run only
22.xfor some time, butrelease.ymlandsemantic.ymlwere still pinned to20.x— the only workflows left on it. Meanwhile 47 packages onmainalready declarenode >=22(@augment-vir/*,@date-vir/*,got,@sindresorhus/is, …), sonpm cion Node 20 emits a wall ofEBADENGINEwarnings today. They are warnings rather than errors only because there is no.npmrcsettingengine-strict.Changes
package.jsonengines.node:>=20→>=22.github/workflows/release.yml20.x→22.x(+ step label).github/workflows/semantic.yml20.x→22.x(+ step label).github/workflows/node.js.yml[22.x]→[22.x, 24.x]Verification
Run locally on Node v24.9.0, against both current
main(vitest 4) and the vitest 5 branch from #2654, so this is safe to merge in either order:npm ci— installs clean, zeroEBADENGINEwarningsnpm test— 92 test files, 969 tests passnpm run build(tsc) — clean