Skip to content

ci(deploy-tests): run the nightly lanes under Node.js 24 and 26 - #403

Merged
k-taro56 merged 3 commits into
mainfrom
ci/deploy-tests-node-matrix
Oct 30, 2026
Merged

k-taro56 merged 3 commits into
mainfrom
ci/deploy-tests-node-matrix

Conversation

@k-taro56

@k-taro56 k-taro56 commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The nightly deploy-tests runs now build and serve the applications under both Node.js 24 and Node.js 26.

  • Lanes: each nightly run (stable and canary) is 2 targets × 2 Node.js versions × 64 shards. That is 256 jobs, the most a matrix holds. The plan refuses a run that would exceed it.
  • Harness vs. application: the harness stays on Node.js 24.22.1, because Next.js's run-tests.js does 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 own PATH (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.
  • Dispatch: a new node input picks 24 (default), 26 or 24 26. Pull request runs take 24. A host builds and serves on its own runtime, so it takes 24 only.
  • Results: verdicts carry the lane's Node.js (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: Measured carries node, and a reviewed case may name the nodes it 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 for cloudflare.

The whole manifest under Node.js 26 on both targets (runs 41023438620 and 41023442374) found no adapter defect. Three new readings cover what failed:

  • Upstream, node (12 cases of prerender-preview, preview-fallback and prerender). Next.js 16.4.3's compiled jsonwebtoken reads buffer.SlowBuffer as 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 with fast-jwt instead.
  • Environment, both targets (prerender-native-module, turbopack-reports). The fixture's addon calls v8::Context::GetIsolate, which Node.js 26's V8 no longer has, so its node-gyp rebuild fails at install.
  • Environment, node (edge-runtime-node-compatibility, 2 node:buffer cases). The cases expect SlowBuffer among node:buffer's keys.

next-form's recorded flake also failed once.

Review fixes

  • The deploy hook switches PATH to the lane's Node.js only after it reads the suite's variables (read-suite-env.ts). Before, the read took the new PATH for a suite variable and handed the runner's PATH to 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 node with ADAPTER_TEST_NODE_DIR set to Node.js 26.13.0: the hooks built and served the fixture on v26.13.0 and stopped it.
  • deploy-tests typecheck, ESLint, oxfmt, knip, vocabulary, the deploy-tests test project.
  • judge.test.ts: lane readings are tried first, and are not read under 24 or without a lane.
  • Dispatches on this branch with node: 26 over the whole manifest on both targets, after the readings: runs 41025762436 and 41025767098.

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-deploy

arkor-deploy Bot commented Oct 30, 2026

Copy link
Copy Markdown

Arkor — Preview deployments for arkorlab-upwind

Use the checkbox below to choose whether this pull request gets preview deployments.

  • Build and deploy previews for this pull request

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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T08:21:59.215233Z 5f23f91 New commits
🔒 Security Review ✅ Completed 2026-10-30T08:22:57.820344Z 5f23f91 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Warning

Review limit reached

You'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.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3b5db631-526a-4b4e-9f89-b188f364ebce
Commits

Reviewing files that changed from the base of the PR and between c23cbae and 5f23f91.

Files selected for processing: 7
  • tools/deploy-tests/REVIEWED.md
  • tools/deploy-tests/scripts/e2e-deploy.sh
  • tools/deploy-tests/src/judge-results.ts
  • tools/deploy-tests/src/judge.ts
  • tools/deploy-tests/src/reviewed.ts
  • tools/deploy-tests/src/verdicts.ts
  • tools/deploy-tests/test/judge.test.ts

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: affab61f-ff65-43d8-8f9d-21dfda1ed565
Commits

Reviewing files that changed from the base of the PR and between 2e29ab2 and c23cbae.

Files selected for processing: 9
  • .github/workflows/deploy-tests.yaml
  • tools/deploy-tests/README.md
  • tools/deploy-tests/scripts/e2e-cleanup.sh
  • tools/deploy-tests/scripts/e2e-deploy.sh
  • tools/deploy-tests/src/judge-results.ts
  • tools/deploy-tests/src/report-results.ts
  • tools/deploy-tests/src/verdicts.ts
  • tools/deploy-tests/test/judge.test.ts
  • tools/deploy-tests/test/workflow-security.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

The deploy-test workflow adds Node.js 26 application runs alongside Node.js 24. It validates and builds the selected matrix, configures the application runtime for deploy hooks, and records and summarizes shard results by target and Node.js version.

Changes: Deploy-test runtime lanes

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: Normal

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
Loading

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: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely identifies the main change: running nightly deploy-test lanes under Node.js 24 and 26.
Docstring Coverage Passed 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. Documentat…
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.
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.

❤️ Share

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

@greptile-apps

greptile-apps Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge.

Summary

The PR adds Node.js 24 and 26 lanes to nightly deployment tests.

  • Nightly deploy tests build applications with Node.js 24 and 26.
  • The judge matches Node.js-specific failures to their own lane.
  • Each report keeps its target and Node.js lane totals separate.

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"]
Loading

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.
@k-taro56
k-taro56 merged commit da732c8 into main Oct 30, 2026
250 checks passed
@k-taro56
k-taro56 deleted the ci/deploy-tests-node-matrix branch October 30, 2026 09:05
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