Repository navigation
ci(deploy-tests): run the nightly lanes under Node.js 24 and 26 - #403
Conversation
Each nightly run now builds and serves the applications under Node.js 24 and under Node.js 26: 2 targets x 2 Node.js x 64 shards, the 256 jobs a matrix holds. The harness stays on Node.js 24.22.1, because Next.js's run-tests.js does not load on 26. In a 26 lane, the deploy and cleanup hooks put Node.js 26.13.0 first on their PATH (ADAPTER_TEST_NODE_DIR), so install, build and server all run on it. A dispatch picks 24, 26 or both with the new node input. Pull request runs take 24, and a host takes 24 alone. Verdicts carry the lane's Node.js, and the report sums each lane apart.
|
Arkor — Preview deployments for arkorlab-upwind Use the checkbox below to choose whether this pull request gets preview deployments.
Checking this builds the latest commit and future pushes. Unchecking stops queued and future builds; a running build can finish and an existing preview stays available. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 39 minutes. View limit details
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Select and build the Node.js matrix .github/workflows/deploy-tests.yaml, tools/deploy-tests/test/workflow-security.test.ts, tools/deploy-tests/README.md |
Scheduled runs include Node.js 24 and 26, pull requests use 24, and dispatches can select 24, 26, or both. Planning validates selections, limits the matrix to 256 jobs, and tests the resulting choices. |
Run deploy hooks with the application runtime .github/workflows/deploy-tests.yaml, tools/deploy-tests/scripts/e2e-deploy.sh, tools/deploy-tests/scripts/e2e-cleanup.sh |
Node.js 26 jobs set up Node.js 26.13.0 for application commands and pass its directory to the hooks. The hooks prepend that directory to PATH when it is set. |
Record and summarize lane results tools/deploy-tests/src/verdicts.ts, tools/deploy-tests/src/judge-results.ts, tools/deploy-tests/src/report-results.ts, .github/workflows/deploy-tests.yaml, tools/deploy-tests/test/judge.test.ts |
Verdicts can include a Node.js version. The report groups expected shards and verdicts by target and version, with tests covering separate Node.js 24 and 26 lanes. |
Priority:
Estimated code review effort: 3 (Moderate) | ~25 minutes
Change: Feature
Sequence Diagram(s)
sequenceDiagram
participant Workflow as Deploy-test workflow
participant Deploy as e2e-deploy.sh
participant Judge as judge-results.ts
participant Report as report-results.ts
Workflow->>Deploy: Pass application Node.js directory
Deploy->>Deploy: Select Node.js through PATH
Workflow->>Judge: Pass target, shard, and Node.js version
Judge->>Report: Provide lane-tagged shard verdict
Report->>Report: Group verdicts and expected shards by lane
Suggested reviewers: soleil-colza
Merge Risk: 
Minimal · previous review c23cb
-
Nightly runs add Node.js 26 coverage; no merge-blocking issue was identified.
Pre-merge checks: 
5
-
Full details: Docstring Coverage
-
Explanation
Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 2 functions across 7 files. (2 skipped: 2 unsupported.)
-
Finishing Touches
-
📝 Generate docstrings
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
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.
Comment @coderabbitai help to get the list of available commands.
[Medium impact] The PR appears safe to merge. SummaryThe PR adds Node.js 24 and 26 lanes to nightly deployment tests.
No actionable new issues were found. Diagram%%{init: {'theme': 'neutral'}}%%
flowchart TD
Plan["Choose target, Node.js version, and shard"] --> Harness["Run harness on Node.js 24"]
Harness --> Hooks["Build and serve with the lane's Node.js"]
Hooks --> Judge["Judge results against matching known failures"]
Judge --> Verdict["Save verdict with target and Node.js version"]
Verdict --> Report["Report each lane separately"]
Reviews (3) · Last reviewed commit: "fix(deploy-tests): read the Node.js 26 l..." · Reviewed by Greptile |
…de.js The deploy hook put ADAPTER_TEST_NODE_DIR on PATH before it read the suite's variables. read-suite-env.ts compares the hook's environment with the harness's, so it took the new PATH for a suite variable and handed the runner's PATH to the application. The switch now comes after that read.
A reviewed case can name the Node.js lanes it holds for (nodes), and a verdict carries its lane in Measured. The judge tries a reading for the lane's own Node.js before one for every Node.js. Three readings for 26, from the whole manifest run under it on both targets (runs 41023438620 and 41023442374): - upstream, node: Next.js 16.4.3's compiled jsonwebtoken reads buffer.SlowBuffer as it loads, and Node.js 26 has none. Preview cookies are never signed (prerender-preview, preview-fallback, prerender). v16.5.0-canary.30 signs with fast-jwt instead. - environment: the native-addon fixture calls v8::Context::GetIsolate, which Node.js 26's V8 no longer has, so its install fails (prerender-native-module, turbopack-reports). - environment, node: edge-runtime-node-compatibility expects SlowBuffer in node:buffer.
Summary
The nightly deploy-tests runs now build and serve the applications under both Node.js 24 and Node.js 26.
run-tests.jsdoes not load on 26 (fix(ci): run the deploy-tests shards on Node.js 24 #402). In a 26 lane, the job also sets up Node.js 26.13.0. The deploy and cleanup hooks put it first on their ownPATH(ADAPTER_TEST_NODE_DIR), so the application's install, its build and the server that serves it all run on 26. 26.13.0 is exact because the adapter guards native Functions by exact version.nodeinput picks24(default),26or24 26. Pull request runs take 24. A host builds and serves on its own runtime, so it takes 24 only.node). Artifacts are named…-<target>-node<N>-<shard>, and the report sums each lane apart (node, Node.js 26). Job names gain(Node.js N).Node.js 26 readings
A lane is judged under its own Node.js:
Measuredcarriesnode, and a reviewed case may name thenodesit holds for. A reading for the lane's own Node.js is tried before one for every Node.js. That matters under 26, where the native suites fail at install, before they reach the Container refusal recorded forcloudflare.The whole manifest under Node.js 26 on both targets (runs 41023438620 and 41023442374) found no adapter defect. Three new readings cover what failed:
node(12 cases ofprerender-preview,preview-fallbackandprerender). Next.js 16.4.3's compiledjsonwebtokenreadsbuffer.SlowBufferas it loads, and Node.js 26 has none.require('next/dist/compiled/jsonwebtoken')throws on 26.13.0 with no adapter, so preview cookies are never signed. v16.5.0-canary.30 signs withfast-jwtinstead.prerender-native-module,turbopack-reports). The fixture's addon callsv8::Context::GetIsolate, which Node.js 26's V8 no longer has, so itsnode-gyp rebuildfails at install.node(edge-runtime-node-compatibility, 2node:buffercases). The cases expectSlowBufferamongnode:buffer's keys.next-form's recorded flake also failed once.Review fixes
PATHto the lane's Node.js only after it reads the suite's variables (read-suite-env.ts). Before, the read took the newPATHfor a suite variable and handed the runner'sPATHto the application (Sentry).Verified
workflow-security.test.ts: the nightly plan is 256 jobs across both lanes. A pull request takes node / 24. A dispatch gets the versions it names. Unknown versions, and 26 for a host, are refused.judge.test.ts: the report sums lanes apart.pnpm check:deploy-tests-local --target nodewithADAPTER_TEST_NODE_DIRset to Node.js 26.13.0: the hooks built and served the fixture onv26.13.0and stopped it.judge.test.ts: lane readings are tried first, and are not read under 24 or without a lane.node: 26over the whole manifest on both targets, after the readings: runs 41025762436 and 41025767098.