Repository navigation
fix(ci): raise Docker publish build heap budget to 12288 MB (#14325) - #14469
Merged
Merged
Conversation
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.
Closes #14325
Root cause
None of the 4
docker/build-push-actionsteps in.github/workflows/docker-publish.yml(
build,build-web,build-bun-base,build-bun-web) passedOMNIROUTE_BUILD_MEMORY_MBin their
build-args— onlyOMNIROUTE_USE_TURBOPACK=0. That left the Dockerfile's defaultARG OMNIROUTE_BUILD_MEMORY_MB=6144in effect for the webpack production build(
Dockerfile:165-166), whilebuild.yml:52andquality.yml:133already run the identicalnpm run build/build:releaseon the same GitHub-hosted runner class withOMNIROUTE_BUILD_MEMORY_MB=12288and stay green. Sincedocker-publish.ymlforces webpack(
OMNIROUTE_USE_TURBOPACK=0, not Turbopack),--max-old-space-sizedirectly bounds theprocess's real memory use there, so the 6144 MB ceiling is exactly what produced the
"FATAL ERROR: ... JavaScript heap out of memory" crash that has kept the
:nextchannelstuck at the 2026-09-17 image since 2026-09-18 16:58 UTC.
Fix
Add
OMNIROUTE_BUILD_MEMORY_MB=12288to all 4build-argsblocks in.github/workflows/docker-publish.yml, matching the already-green budget used on the samerunner class in
build.yml/quality.yml. The twobunsteps useDockerfile.bun, whichdeclares no
OMNIROUTE_BUILD_MEMORY_MBARG, so the addition there is a harmless no-op keptfor consistency across all 4 blocks.
Regression test
tests/unit/docker-publish-build-heap-14325.test.ts(new) reads the workflow file andasserts every
build-argsblock setsOMNIROUTE_BUILD_MEMORY_MB.origin/release/v3.8.51:AssertionError: build-args block(s) at index [0,1,2,3] never override OMNIROUTE_BUILD_MEMORY_MB, so those docker/build-push-action steps build with the Dockerfile's default ARG OMNIROUTE_BUILD_MEMORY_MB=6144 heap ceiling instead of the 12288 MB that build.yml already proves fits the same runner class ...—tests 2, pass 1, fail 1.tests 2, pass 2, fail 0.Gates run
node --import tsx/esm --test tests/unit/docker-publish-build-heap-14325.test.ts→ RED then GREEN (above)docker-cache-export-best-effort-7518,build/docker-next-channel-8576,build/docker-published-image-smoke-11835,build/should-promote-latest-5301,docker-build-memory-budget,build/check-workflows,build-next-isolated,dockerfile-build-heap-4076) → 69/69 pass, none weakenednpm run typecheck:core→ exit 0, cleannpx eslint --suppressions-location config/quality/eslint-suppressions.json tests/unit/docker-publish-build-heap-14325.test.ts→ clean (no output, exit 0)node scripts/check/check-file-size.mjs→ OKnode scripts/check/check-complexity-ratchets.mjs --base-ref origin/release/v3.8.51→ OK, "0 changed file(s) in scope" (only a workflow YAML + a new test file touched, no source file in gate scope)node scripts/check/check-mutation-test-coverage.mjs --strict→ OK, no driftnode scripts/check/check-changelog-integrity.mjs→ OKExisting tests
Ran every existing test file that references
docker-publish.ymlorOMNIROUTE_BUILD_MEMORY_MB(the touched area). All 69 pass unmodified; none were weakened or aligned — this change only
adds a build-arg, it does not change any behavior those tests assert on.
Validation
This is a CI/publish defect whose real fix can only be confirmed by an actual
docker/build-push-actionrun on the GitHub-hosted runner (local
docker buildxcannot reproduce the 6-vCPU/16GB runner'swebpack heap ceiling behavior identically). The plan-file's acceptance criteria call for triggering
a manual "Publish to Docker Hub" run on
release/v3.8.51tip after merge and confirming thebuildjob's webpack pass completes without the V8 OOM, and that
docker pull diegosouzapw/omniroute:nextpicks up a fresh digest — this is left to the maintainer merging the PR, since it requires the real
CI runner.
Plan-file: _tasks/pipeline/bugs/2-implementing/14325-fix-ci-docker-next-channel-stuck-at-2026-09-17-every-publish-s.plan.md