Run Wasm.Build.Tests Helix jobs in parallel#130798
Merged
Merged
Conversation
WBT (buildwasmapps) fans out sendtohelix.proj into several sendtohelixhelp.proj invocations (Workloads/Webcil/Fingerprinting/Bundler combos). sendtohelix.proj already invokes them with BuildInParallel=true, but the Send to Helix msbuild call passed no /maxcpucount, so it ran on a single node and each Helix job was sent then waited to completion before the next was sent. Pass /maxcpucount:8 (as libraries-jitstress.yml already does) so the per-combo Helix jobs are sent and awaited concurrently within the existing Build stage.
|
Azure Pipelines: Successfully started running 5 pipeline(s). 10 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the Wasm.Build.Tests (“buildwasmapps”) Helix send steps so sendtohelix.proj can actually execute its existing BuildInParallel=true fan-out concurrently by giving the driving MSBuild process multiple nodes via /maxcpucount:8.
Changes:
- Add
/maxcpucount:8to theextraHelixArgumentspassed toeng/pipelines/libraries/helix.ymlfor the WBTbuildwasmappsscenario. - Apply the change consistently across the three WBT-sending templates (Mono browser, CoreCLR browser, and “simple” WBT sender).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| eng/pipelines/common/templates/simple-wasm-build-tests.yml | Adds /maxcpucount:8 to the Helix send invocation for WBT so multi-combo sends can run concurrently. |
| eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml | Adds /maxcpucount:8 to the CoreCLR WBT Helix send invocation to enable parallel fan-out. |
| eng/pipelines/common/templates/browser-wasm-build-tests.yml | Adds /maxcpucount:8 to the Mono WBT Helix send invocation to enable parallel fan-out. |
pavelsavara
temporarily deployed
to
copilot-pat-pool
July 15, 2026 20:56 — with
GitHub Actions
Inactive
pavelsavara
marked this pull request as ready for review
July 15, 2026 20:56
Contributor
|
Tagging subscribers to 'arch-wasm': @lewing, @pavelsavara |
pavelsavara
temporarily deployed
to
copilot-pat-pool
July 15, 2026 20:56 — with
GitHub Actions
Inactive
|
Azure Pipelines: Successfully started running 5 pipeline(s). 10 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
maraf
approved these changes
Jul 16, 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.
Fixes #118938
Problem
Wasm.Build.Tests (WBT, the
buildwasmappsscenario) sends its Helix jobs sequentially — each job is sent, then the build blocks onWaiting for completionbefore the nextSent Helix Jobis issued. This serializes the whole WBT run behind the sum of every Helix job's duration.Root cause
WBT
postBuildStepscalleng/pipelines/libraries/helix.yml, which runssrc/libraries/sendtohelix.proj. Forbuildwasmapps, that project fans out into a cartesian product of sub-projects (TestUsingWorkloads×WasmEnableWebcil×WasmFingerprintAssets× bundler-friendly), and invokes them with:_BuildInParallelis alreadytruewhen there is more than one sub-project. ButBuildInParallelonly actually runs builds concurrently when the msbuild process driving it has multiple nodes (/maxcpucount). TheSend to Helixstep passed no/maxcpucount, so it ran on a single node — each sub-project'sTesttarget (which sends a Helix job and waits for its completion) ran to completion before the next started. That is exactly the sequentialSent Helix Job→Waiting for completionpattern in #118938.Fix
Pass
/maxcpucount:8to the WBT Helix send (via the existingextraHelixArguments), so the already-presentBuildInParallel=truesends and awaits the per-combo Helix jobs concurrently. This is the same mechanismeng/pipelines/coreclr/libraries-jitstress.ymlalready uses (extraHelixArguments: /maxcpucount:10) to parallelize its multi-scenario sends.Applied to all three WBT senders:
eng/pipelines/common/templates/browser-wasm-build-tests.yml(browser Mono)eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml(browser CoreCLR)eng/pipelines/common/templates/simple-wasm-build-tests.yml(Mono single-threaded; used by the extra-platforms wasm pipelines)Notes
Buildstage — no new stage, no dependency on the wholeBuildstage completing, and no Helix Job Monitor. This is an intentional alternative to Move Wasm.Build.Tests into a dedicated WasmBuildTests pipeline stage #130773 (which moves WBT into a dedicatedWasmBuildTestsstage); that approach fixes stage organization but delays WBT start until the entireBuildstage finishes and does not by itself change the sequential send behavior.StopOnFirstFailure="false"is already set, so parallel sends still aggregate all failures; per-Helix-job timeouts are unchanged.Note
This pull request was authored by GitHub Copilot.