Skip to content

chore(ci): drop Windows-specific Node pin, track 24 on all platforms - #2824

Merged
Tobbe merged 1 commit into
cedarjs:mainfrom
lisa-assistant:lisa/windows-ci-drop-node-pin
Sep 25, 2026
Merged

Tobbe merged 1 commit into
cedarjs:mainfrom
lisa-assistant:lisa/windows-ci-drop-node-pin

Conversation

@lisa-assistant

Copy link
Copy Markdown
Collaborator

Why

Windows CI has been pinned to Node 24.15.0 since the libuv file-watcher
assertion crash (libuv/libuv#5010) was discovered. That reason no longer
applies: the fix shipped in libuv#5152, was cherry-picked into Node via
nodejs/node#65118, and first released in Node 24.21.0 (2026-09-08).

Investigating #2146 (recurring nightly Windows CI failures), the
dominant signature is a V8 Maglev JIT crash (exit code 3221226505 /
STATUS_STACK_BUFFER_OVERRUN, tracked upstream at nodejs/node#62260). We
already mitigate this for cedar dev's web server via --no-maglev
(packages/cli/src/commands/dev/devHandler.ts), but:

  • the crash still recurs even with --no-maglev present — confirmed
    upstream on 2026-09-21 that the flag only reduces the crash rate ~5x, it
    doesn't eliminate it
  • it also crashes in paths the flag never covers, e.g. yarn install
    itself (observed in a Sept 10 RSC smoke-tests run)

One upstream reporter also noted their repro doesn't reproduce on Node
24.19.0/22.23.2 while it does on 24.12.0, suggesting additional
relevant fixes landed in that range too — all after our 24.15.0 pin.

What

Drop the Windows-only version override in set-up-job/action.yml so
Windows tracks the same floating 24 as every other platform, picking up
both the libuv fix and any V8/Maglev-adjacent fixes in later 24.x
releases.

This isn't expected to fully eliminate the Maglev crashes (upstream is
explicit that --no-maglev alone doesn't), but it removes an unnecessary
constraint and may reduce the frequency. Worth keeping --no-maglev and
extending it to the still-uncovered paths (yarn install/corepack,
cedar serve, api-server-watch, cedar storybook) as a separate
follow-up if failures persist after this lands.

Test plan

  • Nightly Windows run (.github/workflows/nightly-windows.yml) picks
    up Node 24.21.0+ and completes without regressions
  • Watch Nightly Windows CI failure #2146 for a change in failure frequency/signature
    over the following nights

Windows CI was pinned to Node 24.15.0 to avoid a libuv file-watcher
assertion crash (libuv/libuv#5010). That fix shipped upstream in
libuv#5152, cherry-picked into Node via nodejs/node#65118, and first
released in Node 24.21.0 (2026-09-08). The pin's original reason no
longer applies, so Windows can track the same floating `24` version
as every other platform.

This also moves Windows off 24.15.0, a version that predates some
V8 Maglev JIT crash fixes reported upstream in nodejs/node#62260,
which may reduce (though not eliminate, per upstream measurements)
the STATUS_STACK_BUFFER_OVERRUN crashes seen in cedarjs#2146.
@netlify

netlify Bot commented Sep 23, 2026

Copy link
Copy Markdown

👷 Deploy request for cedarjs pending review.

Visit the deploys page to approve it

Name Link
🔨 Latest commit 22db062

@github-actions github-actions Bot added this to the chore milestone Sep 23, 2026
@nx-cloud

nx-cloud Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

🤖 Nx Cloud AI Fix

Ensure the fix-ci command is configured to always run in your CI pipeline to get automatic fixes in future runs. For more information, please see https://nx.dev/ci/features/self-healing-ci


View your CI Pipeline Execution ↗ for commit 22db062

Command Status Duration Result
nx run-many -t build:pack --exclude create-ceda... ✅ Succeeded 3s View ↗
nx run-many -t build ✅ Succeeded <1s View ↗
nx run-many -t build --output-style=stream ✅ Succeeded 3s View ↗

💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗


☁️ Nx Cloud last updated this comment at 2026-09-23 12:46:14 UTC

@greptile-apps

greptile-apps Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

The PR appears safe to merge; the shared action remains consistent with Node 24 requirements and the project overview.

Summary

Updates the shared CI setup action so every platform, including Windows, tracks the latest Node.js 24.x release instead of pinning Windows to 24.15.0.

  • Removes the Windows-specific Node patch override.
  • Retains Node.js major version 24 across all CI platforms.
  • Updates the explanatory comment to document why the previous pin is no longer needed.

Reviews (1) · Last reviewed commit: "chore(ci): drop Windows-specific Node pi..."

@coderabbitai

coderabbitai Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 35699334-6ab2-4569-9a69-8737f7d6c195

📥 Commits

Reviewing files that changed from the base of the PR and between 214c6e5 and 22db062.

📒 Files selected for processing (1)
  • .github/actions/set-up-job/action.yml

Included review availability: Your plan provides up to 2 included reviews per hour; 1 remains after this review.


📝 Summary

Summary by CodeRabbit

  • Chores
    • Updated the project’s automated environment to use Node.js 24 consistently across supported runners, removing a platform-specific version difference. This also aligns the runtime with a release containing a relevant file-watcher fix. No changes to end-user features or application behavior.

Walkthrough

The setup step now uses Node 24 on all runners instead of pinning Windows to Node 24.15.0. Its comments now state that the cited libuv file-watcher fix shipped in Node 24.21.0.

Changes

Node.js Setup

Layer / File(s) Summary
Node.js version selection
.github/actions/set-up-job/action.yml
The setup step uses Node 24 on all runners. The comments cite Node 24.21.0 for the libuv fix.

Priority: ⚪ Not assessed

Merge Risk: ⚪ Minimal · up to 22db0

Windows now follows the same Node 24 selection as other runners; no material merge-blocking issue is established.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: removing the Windows-specific Node.js pin so all platforms track Node 24.
Description check ✅ Passed The description is directly related to the changeset. It explains the reason for removing the Windows-specific Node.js pin, the expected impact, and the test plan.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Tobbe
Tobbe merged commit 6923b19 into cedarjs:main Sep 25, 2026
34 checks passed
lisa-assistant added a commit that referenced this pull request Sep 25, 2026
…ed build (#2830)

## Follow-up to #2824

While babysitting #2823's rerun (to validate #2824's fix for the Maglev
crash pattern in #2146), a **new** Windows failure surfaced on the
`build-lint-test` job, in `@cedarjs/api-server-watch:test`:

```
Assertion failed: !_wcsnicmp(filename, dir, dirlen), file src\win\fs-event.c, line 72
```

This is the exact libuv file-watcher assertion (libuv/libuv#5010) that
#2824 was supposed to route around by dropping Cedar's stale
`24.15.0` Windows pin in favor of a floating `24`, since the real fix
shipped upstream in Node 24.21.0.

Turns out that's not sufficient on its own. The job's "Set up Node.js"
step logs:

```
Found in cache @ C:\hostedtoolcache\windows\node\24.20.0\x64
node: v24.20.0
```

GitHub's Windows runner image currently pre-caches Node **24.20.0**
— one release behind 24.21.0. `actions/setup-node` defaults to
`check-latest: false`, so for a floating `'24'` version spec it
happily uses that stale cached build instead of checking whether a
newer 24.x release exists. The libuv fix never gets picked up as a
result.

This PR adds `check-latest: true` to the Node setup step so
`actions/setup-node` always checks for (and downloads, if needed) the
latest matching release instead of trusting a possibly-stale runner
cache.

### Test plan
- [ ] Confirm a subsequent Windows CI run resolves Node to >= 24.21.0
      (watch for `node: v24.2x.x` in the "Set up Node.js" step logs,
      not `24.20.0`)
- [ ] Confirm `@cedarjs/api-server-watch:test` and other Windows
      file-watcher-dependent tests pass without the `fs-event.c`
      assertion
Tobbe pushed a commit that referenced this pull request Sep 26, 2026
…2824)

## Why

Windows CI has been pinned to Node `24.15.0` since the libuv
file-watcher
assertion crash (libuv/libuv#5010) was discovered. That reason no longer
applies: the fix shipped in libuv#5152, was cherry-picked into Node via
nodejs/node#65118, and first released in **Node 24.21.0** (2026-09-08).

Investigating #2146 (recurring nightly Windows CI
failures), the
dominant signature is a V8 Maglev JIT crash (exit code `3221226505` /
`STATUS_STACK_BUFFER_OVERRUN`, tracked upstream at nodejs/node#62260).
We
already mitigate this for `cedar dev`'s web server via `--no-maglev`
(`packages/cli/src/commands/dev/devHandler.ts`), but:

- the crash still recurs even with `--no-maglev` present — confirmed
upstream on 2026-09-21 that the flag only reduces the crash rate ~5x, it
  doesn't eliminate it
- it also crashes in paths the flag never covers, e.g. `yarn install`
  itself (observed in a Sept 10 RSC smoke-tests run)

One upstream reporter also noted their repro doesn't reproduce on Node
`24.19.0`/`22.23.2` while it does on `24.12.0`, suggesting additional
relevant fixes landed in that range too — all after our `24.15.0` pin.

## What

Drop the Windows-only version override in `set-up-job/action.yml` so
Windows tracks the same floating `24` as every other platform, picking
up
both the libuv fix and any V8/Maglev-adjacent fixes in later 24.x
releases.

This isn't expected to fully eliminate the Maglev crashes (upstream is
explicit that `--no-maglev` alone doesn't), but it removes an
unnecessary
constraint and may reduce the frequency. Worth keeping `--no-maglev` and
extending it to the still-uncovered paths (`yarn install`/corepack,
`cedar serve`, api-server-watch, `cedar storybook`) as a separate
follow-up if failures persist after this lands.

## Test plan

- [ ] Nightly Windows run (`.github/workflows/nightly-windows.yml`)
picks
      up Node 24.21.0+ and completes without regressions
- [ ] Watch #2146 for a change in failure
frequency/signature
      over the following nights

(cherry picked from commit 6923b19)
Tobbe pushed a commit that referenced this pull request Sep 26, 2026
…ed build (#2830)

## Follow-up to #2824

While babysitting #2823's rerun (to validate #2824's fix for the Maglev
crash pattern in #2146), a **new** Windows failure surfaced on the
`build-lint-test` job, in `@cedarjs/api-server-watch:test`:

```
Assertion failed: !_wcsnicmp(filename, dir, dirlen), file src\win\fs-event.c, line 72
```

This is the exact libuv file-watcher assertion (libuv/libuv#5010) that
#2824 was supposed to route around by dropping Cedar's stale
`24.15.0` Windows pin in favor of a floating `24`, since the real fix
shipped upstream in Node 24.21.0.

Turns out that's not sufficient on its own. The job's "Set up Node.js"
step logs:

```
Found in cache @ C:\hostedtoolcache\windows\node\24.20.0\x64
node: v24.20.0
```

GitHub's Windows runner image currently pre-caches Node **24.20.0**
— one release behind 24.21.0. `actions/setup-node` defaults to
`check-latest: false`, so for a floating `'24'` version spec it
happily uses that stale cached build instead of checking whether a
newer 24.x release exists. The libuv fix never gets picked up as a
result.

This PR adds `check-latest: true` to the Node setup step so
`actions/setup-node` always checks for (and downloads, if needed) the
latest matching release instead of trusting a possibly-stale runner
cache.

### Test plan
- [ ] Confirm a subsequent Windows CI run resolves Node to >= 24.21.0
      (watch for `node: v24.2x.x` in the "Set up Node.js" step logs,
      not `24.20.0`)
- [ ] Confirm `@cedarjs/api-server-watch:test` and other Windows
      file-watcher-dependent tests pass without the `fs-event.c`
      assertion

(cherry picked from commit 7f720ba)
@Tobbe Tobbe modified the milestones: chore, v7.0.0 Sep 26, 2026
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