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 the same file to the same artifact path.
| Build |
Failed Step |
File |
| 2924167 |
Publish intermediate artifacts (linux_bionic-arm64 NativeAOT) |
NativeAOTRuntimePacks/Shipping/Microsoft.NETCore.App.Ref.9.0.15.nupkg |
| 2918236 |
Publish intermediate artifacts |
NativeAOTRuntimePacks/Shipping/Microsoft.NETCore.App.Ref.9.0.15.nupkg |
Root cause
In eng/pipelines/runtime-official.yml (release/9.0), the upload-intermediate-artifacts-step.yml template is called with a shared name parameter across all platforms in a platform-matrix.yml expansion:
- NativeAOT (27 platforms): all use
name: NativeAOTRuntimePacks (line 303)
- Mono (many platforms): all use
name: MonoRuntimePacks (lines 347, 365, 383, 455, 483, 517, 549)
Compare with CoreCLR which correctly uses name: $(osGroup)$(osSubgroup)_$(archType) — unique per platform.
Since all NativeAOT/Mono jobs upload to the same subdirectory (IntermediateArtifacts/NativeAOTRuntimePacks/Shipping/), files that are identical across platforms — like the arch-independent ref pack Microsoft.NETCore.App.Ref.9.0.15.nupkg — collide when two jobs finish simultaneously.
Why this is tricky to fix
- NativeAOT: Nothing downstream references
NativeAOTRuntimePacks by path, so renaming to NativeAOTRuntimePacks/$(osGroup)$(osSubgroup)_$(archType) would be safe.
- Mono: The Workloads job (lines 620-651) downloads from
IntermediateArtifacts/MonoRuntimePacks/Shipping/... with platform-specific filename patterns. Changing the subdirectory would require updating those download patterns to use wildcards like MonoRuntimePacks/*/Shipping/....
Not applicable to main/10.0
This issue only affects release/9.0 — main and release/10.0 have moved to VMR builds and no longer use upload-intermediate-artifacts-step.yml.
Ref: dotnet/dnceng#1916
Problem
The
dotnet-runtime-officialpipeline onrelease/9.0has intermittent "File upload failed even after retry" errors caused by multiple platform jobs uploading the same file to the same artifact path.Recent failures (from dotnet/dnceng#1916)
NativeAOTRuntimePacks/Shipping/Microsoft.NETCore.App.Ref.9.0.15.nupkgNativeAOTRuntimePacks/Shipping/Microsoft.NETCore.App.Ref.9.0.15.nupkgRoot cause
In
eng/pipelines/runtime-official.yml(release/9.0), theupload-intermediate-artifacts-step.ymltemplate is called with a sharednameparameter across all platforms in aplatform-matrix.ymlexpansion:name: NativeAOTRuntimePacks(line 303)name: MonoRuntimePacks(lines 347, 365, 383, 455, 483, 517, 549)Compare with CoreCLR which correctly uses
name: $(osGroup)$(osSubgroup)_$(archType)— unique per platform.Since all NativeAOT/Mono jobs upload to the same subdirectory (
IntermediateArtifacts/NativeAOTRuntimePacks/Shipping/), files that are identical across platforms — like the arch-independent ref packMicrosoft.NETCore.App.Ref.9.0.15.nupkg— collide when two jobs finish simultaneously.Why this is tricky to fix
NativeAOTRuntimePacksby path, so renaming toNativeAOTRuntimePacks/$(osGroup)$(osSubgroup)_$(archType)would be safe.IntermediateArtifacts/MonoRuntimePacks/Shipping/...with platform-specific filename patterns. Changing the subdirectory would require updating those download patterns to use wildcards likeMonoRuntimePacks/*/Shipping/....Not applicable to main/10.0
This issue only affects
release/9.0—mainandrelease/10.0have moved to VMR builds and no longer useupload-intermediate-artifacts-step.yml.Ref: dotnet/dnceng#1916