You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[release/9.0] Fix intermediate artifact upload collisions for NativeAOT and Mono (#125564)
## Problem
The `dotnet-runtime-official` pipeline on `release/9.0` has intermittent
"File upload failed even after retry" errors caused by multiple platform
jobs uploading arch-independent packages (like
`Microsoft.NETCore.App.Ref.9.0.15.nupkg`) to the same artifact path
simultaneously.
**Root cause:** NativeAOT (27 platforms) all upload to `name:
NativeAOTRuntimePacks` and Mono (7+ matrix expansions) all upload to
`name: MonoRuntimePacks` — using a shared subdirectory within the
`IntermediateArtifacts` artifact. When two jobs finish at the same time,
they race to upload the same file, causing blob storage write conflicts.
Compare with CoreCLR, which correctly uses `name:
$(osGroup)$(osSubgroup)_$(archType)` — unique per platform. ✅
## Fix
Make each upload name unique per platform (matching the CoreCLR
pattern):
| Build Type | Before | After |
|---|---|---|
| NativeAOT | `NativeAOTRuntimePacks` |
`NativeAOTRuntimePacks_$(osGroup)$(osSubgroup)_$(archType)` |
| Mono | `MonoRuntimePacks` |
`MonoRuntimePacks_$(osGroup)$(osSubgroup)_$(archType)` |
| Mono multithread | `MonoRuntimePacks` |
`MonoRuntimePacks_multithread_$(osGroup)$(osSubgroup)_$(archType)` |
| CrossAOT | `MonoRuntimePacks` |
`MonoRuntimePacks_crossaot_$(osGroup)$(osSubgroup)_$(archType)` |
| LLVM AOT | `MonoRuntimePacks` |
`MonoRuntimePacks_llvmaot_$(osGroup)$(osSubgroup)_$(archType)` |
Updated the Workloads job download patterns from
`IntermediateArtifacts/MonoRuntimePacks/Shipping/...` to
`IntermediateArtifacts/MonoRuntimePacks*/Shipping/...` so the wildcard
matches all per-platform subdirectories.
The `CopyFiles@2` flatten step (`*/Shipping/*.nupkg`) still works
because each platform subdirectory is still a single path segment.
## Notes
- Only affects `release/9.0` — `main`/`release/10.0` have moved to VMR
builds
- Perf pipelines (`perf-non-wasm-jobs.yml`) use the same pattern but
only have single-platform uploads (no collision risk), so no changes
needed there
Fixes#125561
Ref: dotnet/dnceng#1916
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
0 commit comments