Skip to content

Fix runtime-wasm-perf Mono job by supplying the CoreCLR browser-wasm runtime pack#131032

Closed
akoeplinger wants to merge 2 commits into
dotnet:mainfrom
akoeplinger:fix-wasm-perf-coreclr-pack
Closed

Fix runtime-wasm-perf Mono job by supplying the CoreCLR browser-wasm runtime pack#131032
akoeplinger wants to merge 2 commits into
dotnet:mainfrom
akoeplinger:fix-wasm-perf-coreclr-pack

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

Problem

The runtime-wasm-perf pipeline's Mono build job fails at the "Install workload using artifacts" step:

microsoft.netcore.app.runtime.browser-wasm version <x>-ci is not found in the local feed

Root cause

#130380 added the CoreCLR browser-wasm runtime pack (Microsoft.NETCore.App.Runtime.browser-wasm) to the shared wasm-tools workload manifest. Installing the workload from the local package feed now requires that pack to be present. The Mono perf build job (-s mono+libs+host+packs) never produces it, so dotnet workload install wasm-tools fails. The CoreCLR perf job passes because the workload install is a no-op for the CoreCLR flavor (_GetWorkloadsToInstall only selects workloads for RuntimeFlavor == 'Mono').

#130380 already handled this for the Wasm.Build.Tests pipelines (via the includeCoreClrRuntimePack parameter in browser-wasm-build-tests.yml), but left the runtime-wasm-perf Mono job broken.

Fix

Mirror the approach used for the WBT pipelines:

  • The CoreCLR perf build job (wasm_coreclr) publishes the CoreCLR browser-wasm runtime pack nuget as a new BrowserWasmCoreCLRRuntimePack pipeline artifact.
  • The Mono perf build job (wasm) now depends on the CoreCLR build job and downloads that pack into its local Shipping package feed before the workload-install step.

This serializes the Mono build after the CoreCLR build (they previously ran in parallel), which is the same producer/consumer relationship the WBT pipelines already use.

Testing

This is a CI-pipeline-only change that can't be exercised locally. The logic was verified by tracing the workload-install targets (BuiltNuGetsDir = artifacts/packages/<config>/Shipping, download lands in the feed before install, no interference with the Mono-only pack-count check in workloads-browser.targets) and confirming the dependsOn job name matches the generated job name. It needs a runtime-wasm-perf pipeline run to validate end to end.

Note

This pull request was authored by GitHub Copilot.

…ime pack

PR dotnet#130380 added the CoreCLR browser-wasm runtime pack
(Microsoft.NETCore.App.Runtime.browser-wasm) to the shared wasm-tools
workload manifest. As a result the Mono perf build job's
`dotnet workload install wasm-tools` from the local feed fails, because the
Mono build (-s mono+libs+host+packs) never produces that CoreCLR pack.

Mirror the fix dotnet#130380 applied to the Wasm.Build.Tests pipelines: publish the
CoreCLR browser-wasm runtime pack nuget from the wasm_coreclr build job as the
BrowserWasmCoreCLRRuntimePack pipeline artifact, and make the Mono build job
depend on it and download it into the local Shipping package feed before the
workload install step.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ef6da291-7777-4114-9c73-05398fb2b5f6
@azure-pipelines

Copy link
Copy Markdown
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.

@akoeplinger
akoeplinger requested a review from lewing July 19, 2026 09:15
@akoeplinger

Copy link
Copy Markdown
Member Author

/azp run runtime-wasm-perf

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
No pipelines were found matching this branch/path.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the WebAssembly performance build template to ensure the Mono browser-wasm perf job can install the wasm-tools workload from the local artifacts feed by supplying the CoreCLR browser-wasm runtime pack produced by the CoreCLR perf job.

Changes:

  • Serializes the Mono browser-wasm perf job behind the CoreCLR browser-wasm perf job via an explicit dependsOn.
  • Publishes the CoreCLR Microsoft.NETCore.App.Runtime.browser-wasm runtime pack .nupkg as a dedicated pipeline artifact and downloads it into the Mono job’s local Shipping feed before workload install.

Comment on lines +53 to +55
- script: >-
mkdir -p $(Build.SourcesDirectory)/artifacts/staging-coreclr-runtime-pack &&
cp $(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping/Microsoft.NETCore.App.Runtime.browser-wasm.*.nupkg $(Build.SourcesDirectory)/artifacts/staging-coreclr-runtime-pack
…CoreCLR pack

The previous approach invoked publish-pipeline-artifacts.yml directly as a
postBuildStep. global-build-job.yml forwards osGroup/archType/buildConfig/etc.
to every postBuildStep template, and publish-pipeline-artifacts.yml declares
typed parameters, which enforce strict validation and reject those forwarded
params -> 'Unexpected parameter' pipeline compile errors.

Move the publish (CoreCLR job) and download+stage (Mono job) logic into the
untyped perf-wasm-prepare-artifacts-steps.yml template behind
publishCoreClrRuntimePack/downloadCoreClrRuntimePack params, mirroring the
structure of dotnet#131026 but using the post-dotnet#128498 pipeline-artifact tasks
(PublishPipelineArtifact/DownloadPipelineArtifact) instead of the removed
publish-build-artifacts.yml template and legacy DownloadBuildArtifacts@0.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ef6da291-7777-4114-9c73-05398fb2b5f6
Copilot AI review requested due to automatic review settings July 19, 2026 09:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

Comment on lines +56 to +60
- ${{ if eq(parameters.publishCoreClrRuntimePack, true) }}:
- script: >-
mkdir -p $(Build.SourcesDirectory)/artifacts/staging-coreclr-runtimepack &&
find $(Build.SourcesDirectory)/artifacts/packages/${{ parameters.configForBuild }}/Shipping -maxdepth 1 -name 'Microsoft.NETCore.App.Runtime.browser-wasm.*.nupkg' -not -name '*.symbols.nupkg' -exec cp {} $(Build.SourcesDirectory)/artifacts/staging-coreclr-runtimepack \;
displayName: "Stage CoreCLR runtime pack for workload"
Comment on lines +18 to +19
dependsOn:
- build_browser_wasm_linux_Release_wasm_coreclr
@akoeplinger

Copy link
Copy Markdown
Member Author

Closing in favor of #131026, which fixes the same runtime-wasm-perf breakage (the wasm-tools workload manifest now requiring the CoreCLR browser-wasm runtime pack, from #130380). I pushed the pipeline-artifact task migration onto that branch, so this PR is redundant.

Note

This comment was authored with the help of GitHub Copilot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants