Skip to content

ci: restore Node 18 test support and extend matrix to Node 26 - #1411

Merged
dannyhw merged 1 commit into
mainfrom
dannyhw/ci-tests-misconfiguration-9217de
Jul 26, 2026
Merged

ci: restore Node 18 test support and extend matrix to Node 26#1411
dannyhw merged 1 commit into
mainfrom
dannyhw/ci-tests-misconfiguration-9217de

Conversation

@dannyhw

@dannyhw dannyhw commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Test Main Matrix has been red on main since #1409. This restores Node 18 rather than dropping it, and extends the matrix to Node 26.

What broke

The dependency refresh in #1409 floated two caret ranges across a Node-version boundary:

package before after effect on Node 18
vite 7.3.1 8.1.5 Vite 8 is rolldown-based; rolldown imports styleText from node:util (Node 20.12+)
@rsdoctor/rspack-plugin 1.5.2 1.6.1 pulls rslog@2.3.0, which hard-throws on Node < 20.19

The first killed vitest at startup:

SyntaxError: The requested module 'node:util' does not provide an export named 'styleText'

The second throws Unsupported Node.js version: "18.20.8". Expected Node.js >= 20. at import time, taking down the tester-app bundle tests.

The fix

  • A vite: ^7.3.1 override, and an exact @rsdoctor/rspack-plugin pin in the three tester apps.
  • vitest stays current at 4.1.10. It only needed vite held underneath it — its own range is ^6.0.0 || ^7.0.0 || ^8.0.0-0, so pinning vitest alone did nothing while vite floated to 8. Worth knowing if anyone revisits this.
  • Added Node 26 to the matrix, and set fail-fast: false.

The fail-fast change is what made this hard to read: the Node 18 job cancelled 20/22/24 mid-run (The strategy configuration was canceled because "test_main_matrix._18_ubuntu-latest" failed), so the run reported four broken Node versions when only one was.

Verification

Full suite per version, turbo cache bypassed (TURBO_FORCE=true pnpm test):

Node Result
18.20.8 ✅ 10/10 tasks
20.20.2 ✅ 10/10 tasks
22.22.3 ✅ 10/10 tasks
24.14.1 ✅ 10/10 tasks
26.5.0 ✅ 10/10 tasks

setup-node can resolve Node 26 on runners — the manifest has 7 builds including linux-x64, newest 26.5.0. Note 26 is Current, not LTS (24 "Krypton" is the active LTS), so that cell tracks a fast-moving release line; fail-fast: false keeps a break there from masking the rest.

Security posture

Holding these versions does not undo #1409:

main this PR
pnpm audit 3 advisories (1 moderate, 2 high) identical
koa 2.16.4 / 3.2.1 identical
ws 8.21.1 identical
adm-zip 0.6.0 identical
caniuse-lite 1.0.30001806 identical

The #1409 fixes were koa/ws/adm-zip overrides, which don't interact with vite or rsdoctor. The 3 remaining advisories are pre-existing on main and unaffected either way.

Notes for the reviewer

Two things worth knowing before this gets treated as permanent:

  1. This is a deferral on vite. Holding vite at 7 across a major boundary works today because vitest 4.1.x still accepts ^7.0.0. A future vitest major will require vite 8+, and the choice comes back.
  2. vitest never claimed Node 18. Its engines is ^20.0.0 || ^22.0.0 || >=24.0.0, and was already that at 4.1.0. pnpm only warns on engine mismatches, so Node 18 has been passing on borrowed time rather than declared support. Node 18 has also been EOL since April 2025. If the intent is to keep supporting it, that's a real position — it just isn't one the toolchain is currently backing.

No changeset: dev-dependency and CI changes only, nothing published is affected.

@vercel

vercel Bot commented Jul 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
repack-website Ready Ready Preview, Comment Jul 26, 2026 7:52pm

Request Review

@changeset-bot

changeset-bot Bot commented Jul 26, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: eb20238

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

The dependency refresh in #1409 broke the Node 18 cell of the main test
matrix. Two caret ranges floated across a Node-version boundary:

- vite 7.3.1 -> 8.1.5. Vite 8 is rolldown-based, and rolldown imports
  `styleText` from `node:util` (added in Node 20.12), so vitest died at
  startup with a SyntaxError before running a single test.
- @rsdoctor/rspack-plugin 1.5.2 -> 1.6.1, which pulls rslog 2.3.0. That
  hard-throws "Unsupported Node.js version" on Node < 20.19 at import
  time, taking down the tester-app bundle tests.

Hold both back: a `vite: ^7.3.1` override and an exact @RSdoctor pin in
the three tester apps. vitest itself stays current at 4.1.10 - it only
needed vite held underneath it, not pinning of its own.

Also extend the matrix to Node 26 and disable fail-fast. The Node 18
failure had cancelled the 20/22/24 jobs mid-run, so the matrix reported
four broken versions when only one was actually broken.

Verified locally with `TURBO_FORCE=true pnpm test`, full suite per
version: 18.20.8, 20.20.2, 22.22.3, 24.14.1 and 26.5.0 all pass 10/10
tasks.

The held versions do not weaken the security posture restored in #1409:
`pnpm audit` reports the same 3 advisories as main, and koa, ws, adm-zip
and caniuse-lite all resolve to identical versions.
@dannyhw
dannyhw force-pushed the dannyhw/ci-tests-misconfiguration-9217de branch from 3ee5d4f to eb20238 Compare July 26, 2026 19:51
@dannyhw dannyhw changed the title ci: drop Node 18 from the main test matrix and disable fail-fast ci: restore Node 18 test support and extend matrix to Node 26 Jul 26, 2026
@dannyhw
dannyhw merged commit 27fdee9 into main Jul 26, 2026
15 checks passed
@dannyhw
dannyhw deleted the dannyhw/ci-tests-misconfiguration-9217de branch July 26, 2026 20:00
dannyhw added a commit that referenced this pull request Jul 26, 2026
Conflicts were both in files where main and this branch appended to the
same lists:

- pnpm-workspace.yaml: kept both override groups - this branch's esbuild
  and uuid security overrides plus main's vite hold from #1411.
- pnpm-lock.yaml: took this branch's tree (which carries the React Native
  0.86 resolution) and re-ran `pnpm install` so main's vite override and
  the exact `@rsdoctor/rspack-plugin` pin are reflected.
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