ci(build): split allTests into parallel per-target jobs to end OOM flakes#854
Merged
Merged
Conversation
…akes The single build-job ran `assemble allTests` in one ubuntu-latest job. On a 7 GB runner the combined peak memory (Gradle JVM + Kotlin daemon + per-target test forks + Node for JS/Wasm + native toolchain, all at once) intermittently exceeded physical RAM. The runner was OOM-killed and GitHub reported "The operation was canceled" after ~15 min with no BUILD FAILED — the flaky ~20-minute red builds (seen on PRs #850, #852). Changes: - Split the test run into a matrix of three legs (jvm / js-wasm / native), each running one target family so no single job holds the whole footprint. Legs run in parallel, so wall-clock is the slowest leg instead of the sum. - Run `assemble` as its own memory-light job, preserving the build/package guarantee for all targets. - Add Gradle dependency/wrapper caching to each job (same pattern as docs.yml) so parallel legs don't cold-download the dependency graph. - Capture the memory snapshot on `cancelled()` as well as `failure()` — an OOM-killed runner reports cancelled, not failed, so the existing diagnostic never fired on the runs that needed it. - Keep an aggregate `build-job` gate with the same name so the existing required status check keeps working without re-pointing branch protection. No production code changed; allTests passes locally.
aharakal
approved these changes
Jul 21, 2026
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.
The single build-job ran
assemble allTestsin one ubuntu-latest job. On a 7 GB runner the combined peak memory (Gradle JVM + Kotlin daemon + per-target test forks + Node for JS/Wasm + native toolchain, all at once) intermittently exceeded physical RAM. The runner was OOM-killed and GitHub reported "The operation was canceled" after ~15 min with no BUILD FAILED — the flaky ~20-minute red builds (seen on PRs #850, #852).Changes:
assembleas its own memory-light job, preserving the build/package guarantee for all targets.cancelled()as well asfailure()— an OOM-killed runner reports cancelled, not failed, so the existing diagnostic never fired on the runs that needed it.build-jobgate with the same name so the existing required status check keeps working without re-pointing branch protection.No production code changed; allTests passes locally.