fix(ci): use webpack fallback for Node 26 compat build to stop OOM - #8611
Merged
diegosouzapw merged 1 commit intoJul 27, 2026
Merged
diegosouzapw merged 1 commit into
diegosouzapw merged 1 commit into
Conversation
The `compat-build-26` job in nightly-compat.yml is the only place in the CI
matrix that runs `npm run build` on Node 26 (ci.yml pins CI_NODE_VERSION=24).
It failed every nightly with the runner-reclaimed signature ("The runner has
received a shutdown signal" / "The operation was canceled", no exit code),
always at the same Turbopack compile phase — the classic OOM-kill pattern on
the memory-constrained ubuntu-latest runner.
Root cause: Turbopack's native (Rust, off-V8-heap) allocation is not bounded by
--max-old-space-size and peaks far higher than webpack on OmniRoute's large
module graph (diegosouzapw#6409), heavier still under Node 26. Raising the heap does not
help — the codebase's own documented escape hatch for RAM-constrained
environments is the webpack fallback (OMNIROUTE_USE_TURBOPACK=0; see
docs/reference/ENVIRONMENT.md and scripts/build/build-next-isolated.mjs).
Wire that fallback into the Node 26 compat build: it still validates the app
builds on Node 26 (the point of the job) at a much lower memory peak.
Turbopack-on-Node-24 stays covered by ci.yml's build job.
Adds a regression guard (tests/unit/nightly-compat-node26-webpack-8090.test.ts)
asserting the job keeps the webpack fallback so it cannot silently regress.
Class 1 of the triage (shard test failures) was already resolved by diegosouzapw#8390,
diegosouzapw#8386, diegosouzapw#8381, diegosouzapw#8383.
Closes diegosouzapw#8090
Refs diegosouzapw#6949 diegosouzapw#6409
Merged
HouMinXi
pushed a commit
to HouMinXi/OmniRoute
that referenced
this pull request
Aug 2, 2026
…iegosouzapw#8611) The `compat-build-26` job in nightly-compat.yml is the only place in the CI matrix that runs `npm run build` on Node 26 (ci.yml pins CI_NODE_VERSION=24). It failed every nightly with the runner-reclaimed signature ("The runner has received a shutdown signal" / "The operation was canceled", no exit code), always at the same Turbopack compile phase — the classic OOM-kill pattern on the memory-constrained ubuntu-latest runner. Root cause: Turbopack's native (Rust, off-V8-heap) allocation is not bounded by --max-old-space-size and peaks far higher than webpack on OmniRoute's large module graph (diegosouzapw#6409), heavier still under Node 26. Raising the heap does not help — the codebase's own documented escape hatch for RAM-constrained environments is the webpack fallback (OMNIROUTE_USE_TURBOPACK=0; see docs/reference/ENVIRONMENT.md and scripts/build/build-next-isolated.mjs). Wire that fallback into the Node 26 compat build: it still validates the app builds on Node 26 (the point of the job) at a much lower memory peak. Turbopack-on-Node-24 stays covered by ci.yml's build job. Adds a regression guard (tests/unit/nightly-compat-node26-webpack-8090.test.ts) asserting the job keeps the webpack fallback so it cannot silently regress. Class 1 of the triage (shard test failures) was already resolved by diegosouzapw#8390, diegosouzapw#8386, diegosouzapw#8381, diegosouzapw#8383. Closes diegosouzapw#8090 Refs diegosouzapw#6949 diegosouzapw#6409
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
…iegosouzapw#8611) The `compat-build-26` job in nightly-compat.yml is the only place in the CI matrix that runs `npm run build` on Node 26 (ci.yml pins CI_NODE_VERSION=24). It failed every nightly with the runner-reclaimed signature ("The runner has received a shutdown signal" / "The operation was canceled", no exit code), always at the same Turbopack compile phase — the classic OOM-kill pattern on the memory-constrained ubuntu-latest runner. Root cause: Turbopack's native (Rust, off-V8-heap) allocation is not bounded by --max-old-space-size and peaks far higher than webpack on OmniRoute's large module graph (diegosouzapw#6409), heavier still under Node 26. Raising the heap does not help — the codebase's own documented escape hatch for RAM-constrained environments is the webpack fallback (OMNIROUTE_USE_TURBOPACK=0; see docs/reference/ENVIRONMENT.md and scripts/build/build-next-isolated.mjs). Wire that fallback into the Node 26 compat build: it still validates the app builds on Node 26 (the point of the job) at a much lower memory peak. Turbopack-on-Node-24 stays covered by ci.yml's build job. Adds a regression guard (tests/unit/nightly-compat-node26-webpack-8090.test.ts) asserting the job keeps the webpack fallback so it cannot silently regress. Class 1 of the triage (shard test failures) was already resolved by diegosouzapw#8390, diegosouzapw#8386, diegosouzapw#8381, diegosouzapw#8383. Closes diegosouzapw#8090 Refs diegosouzapw#6949 diegosouzapw#6409
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.
Summary
compat-build-26in.github/workflows/nightly-compat.ymlis the only place in the whole CI matrix that runsnpm run buildon Node 26 (ci.ymlpinsCI_NODE_VERSION: "24"). It failed every nightly with the runner-reclaimed signature ("The runner has received a shutdown signal" / "The operation was canceled", no exit code) always at the same Turbopack compile phase — a classic GitHub-runner OOM kill on the memory-constrainedubuntu-latestrunner.Root cause is documented in the codebase itself (
scripts/build/build-next-isolated.mjs#6409 note;docs/reference/ENVIRONMENT.md): Turbopack's native (Rust, off-V8-heap) allocation is not bounded by--max-old-space-sizeand peaks far above webpack on OmniRoute's large module graph, heavier still under Node 26. The endorsed escape hatch for RAM-constrained environments is the webpack fallback (OMNIROUTE_USE_TURBOPACK=0), which this job was not using.This switches only the
compat-build-26build step to the webpack fallback. It still validates that the app builds on Node 26 (the point of the compat job) at a much lower memory peak. Turbopack-on-Node-24 stays covered byci.yml's build job (OMNIROUTE_USE_TURBOPACK: "1"). Thecompat-testsshard failures were a separate class already fixed by #8390/#8386/#8381/#8383.Test plan
tests/unit/nightly-compat-node26-webpack-8090.test.tsregression guard: parses the workflow and assertscompat-build-26keeps bothnpm run buildandOMNIROUTE_USE_TURBOPACK: "0", so a future edit can't silently revert to the OOM-prone path. Fails on base (0 occurrences of the env var), passes after.typecheck:coreclean;eslintclean; workflow YAML validated.nightly-compatrun. The fix is grounded in the codebase's documented Turbopack-native-memory behavior + the fact that the identical build already passes with webpack in main CI.Closes #8090
Refs #6949, #6409