-
Notifications
You must be signed in to change notification settings - Fork 298
Add ASP.NET Core perf-build pipeline #5243
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
LoopedBard3
merged 12 commits into
dotnet:main
from
LoopedBard3:loopedbard3/aspnetcore-perf-build
Jun 30, 2026
Merged
Changes from 3 commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
898e7c0
Add aspnetcore perf-build pipeline (moved from dotnet/aspnetcore)
657cd3d
Tag perf-build with aspnetcore-sha for infra indexer correlation
ddfcf04
Drop aspnetcore-sha build tag (Option B: indexer reads repo-resource …
097ec3a
Address Copilot review: fix job variables syntax + doc nits
4f41751
Forward sha to all upload buildTypes (Copilot review #7)
2853c6c
Split Windows build into one self-sufficient job per arch
c43515f
Refresh stale sha-parameter comment in upload dispatcher
02530d9
Address Copilot re-review: gate Build stage + robust pack-script defa…
7b1ca1d
Rename pack-bcs-archives.ps1 -> pack-bcs-archives-aspnetcore.ps1
faa66ae
Fail loudly on duplicate runtime-pack nupkgs in pack-bcs-archives-asp…
c96b8cd
Rename $matches local to $nupkgMatches in pack-bcs-archives-aspnetcore
a867923
Stage aspnetcore BCS artifact as the raw runtime-pack nupkg
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,286 @@ | ||
| # aspnetcore-perf-build-jobs.yml | ||
| # | ||
| # Authored build jobs for the ASP.NET Core perf-build pipeline (consumed by | ||
| # eng/pipelines/aspnetcore-perf-build.yml). These jobs are written from scratch | ||
| # here in dotnet/performance instead of reusing dotnet/aspnetcore's | ||
| # `.azure/pipelines/jobs/default-build.yml`, because that template has hard | ||
| # `@self` references (e.g. /eng/common/templates-official/job/job.yml@self) and | ||
| # `@self` always resolves to the ROOT pipeline repo (performance), which does not | ||
| # carry aspnetcore's eng/common layout/contract. So we stand up the build | ||
| # ourselves: pick the dnceng internal pool, check out the aspnetcore mirror at the | ||
| # triggering commit alongside this repo (for the pack script), run aspnetcore's | ||
| # own eng/build with lean perf args (PUBLIC feeds only -- no internal runtime | ||
| # download), pack the per-RID runtime nupkgs into the BCS archive layout via the | ||
| # moved eng/pipelines/tools/pack-bcs-archives.ps1, and publish one pipeline | ||
| # artifact per config. | ||
| # | ||
| # Job names (Windows_build / Linux_x64_build / Linux_arm64_build) are load-bearing: | ||
| # they must match the `dependencyJobName` values in | ||
| # eng/pipelines/upload-build-artifacts-jobs.yml's aspnetcore_* branches. | ||
| # | ||
| # PUBLIC-FEED rationale: aspnetcore's own ci-public.yml builds every public PR with | ||
| # `_InternalRuntimeDownloadArgs` empty, proving public feeds suffice for a from- | ||
| # source pack build. We therefore drop enable-internal-runtimes / get-delegation-sas | ||
| # / the dotnetbuilds-internal-read connection entirely and pass no | ||
| # -RuntimeSourceFeed args. | ||
|
|
||
| parameters: | ||
| aspnetcoreRepoAlias: aspnetcore | ||
| performanceRepoAlias: self | ||
| # Per-config enablement booleans (forward-compat with the MissingBuildsTrigger | ||
| # PerConfiguration indexer). In v1's eager per-commit CI-trigger mode all five | ||
| # are true and all configs build; the booleans let a future Function queue a | ||
| # subset per config. | ||
| aspnetcore_x64_linux: true | ||
| aspnetcore_arm64_linux: true | ||
| aspnetcore_x64_windows: true | ||
| aspnetcore_arm64_windows: true | ||
| aspnetcore_x86_windows: true | ||
|
|
||
| jobs: | ||
|
|
||
| # =========================================================================== | ||
| # Windows multi-arch build job (x64 + x86 + arm64 in one agent) | ||
| # | ||
| # Mirrors aspnetcore ci-public.yml's Windows_build pattern: build.cmd is invoked | ||
| # x64-first WITH native (-nativeToolsOnMachine), then x86 and arm64 with | ||
| # -noBuildNative because they cross-pack against the x64 native bits. Each | ||
| # invocation emits its own per-RID Microsoft.AspNetCore.App.Runtime.win-{arch}.*.nupkg | ||
| # into artifacts/packages/Release/Shipping. The x64 build always runs when any | ||
| # Windows arch is enabled (it produces the native base the others reuse); pack + | ||
| # publish for each arch are individually gated by that arch's boolean. | ||
| # =========================================================================== | ||
| - ${{ if or(eq(parameters.aspnetcore_x64_windows, true), eq(parameters.aspnetcore_arm64_windows, true), eq(parameters.aspnetcore_x86_windows, true)) }}: | ||
| - job: Windows_build | ||
| displayName: 'Build: Windows x64/x86/arm64 (perf-build)' | ||
| timeoutInMinutes: 180 | ||
| pool: | ||
| name: $(DncEngInternalBuildPool) | ||
| demands: ImageOverride -equals windows.vs2026preview.scout.amd64 | ||
| variables: | ||
| - _AspNetCoreRoot: $(Agent.BuildDirectory)\s\aspnetcore | ||
| - _PackScript: $(Agent.BuildDirectory)\s\performance\eng\pipelines\tools\pack-bcs-archives.ps1 | ||
| - _ShippingDir: $(Agent.BuildDirectory)\s\aspnetcore\artifacts\packages\Release\Shipping | ||
| - _StagingRoot: $(Build.ArtifactStagingDirectory)\bcs | ||
| - MSBUILDUSESERVER: "1" | ||
| steps: | ||
| - checkout: ${{ parameters.aspnetcoreRepoAlias }} | ||
| path: s/aspnetcore | ||
| fetchDepth: 1 | ||
| fetchTags: false | ||
| clean: true | ||
| - checkout: ${{ parameters.performanceRepoAlias }} | ||
| path: s/performance | ||
| fetchDepth: 1 | ||
| fetchTags: false | ||
| clean: true | ||
|
|
||
| # x64 -- native base build (always runs when any Windows arch is requested). | ||
| - script: >- | ||
| eng\build.cmd | ||
| -ci | ||
| -prepareMachine | ||
| -nativeToolsOnMachine | ||
| -Configuration Release | ||
| -arch x64 | ||
| -pack | ||
| -all | ||
| -noBuildJava | ||
| /p:OnlyPackPlatformSpecificPackages=true | ||
| $(_BuildArgs) | ||
| /bl:artifacts/log/Release/Build.x64.binlog | ||
| workingDirectory: $(_AspNetCoreRoot) | ||
| displayName: Build x64 | ||
| env: | ||
| MSBUILDUSESERVER: "1" | ||
|
|
||
| - ${{ if eq(parameters.aspnetcore_x86_windows, true) }}: | ||
| - script: >- | ||
| eng\build.cmd | ||
| -ci | ||
| -prepareMachine | ||
| -Configuration Release | ||
| -arch x86 | ||
| -pack | ||
| -all | ||
| -noBuildJava | ||
| -noBuildNative | ||
| /p:OnlyPackPlatformSpecificPackages=true | ||
| $(_BuildArgs) | ||
| -ExcludeCIBinaryLog | ||
| workingDirectory: $(_AspNetCoreRoot) | ||
| displayName: Build x86 | ||
| env: | ||
| MSBUILDUSESERVER: "1" | ||
|
|
||
| - ${{ if eq(parameters.aspnetcore_arm64_windows, true) }}: | ||
| - script: >- | ||
| eng\build.cmd | ||
| -ci | ||
| -prepareMachine | ||
| -Configuration Release | ||
| -arch arm64 | ||
| -pack | ||
| -noBuildJava | ||
| -noBuildNative | ||
|
LoopedBard3 marked this conversation as resolved.
Outdated
|
||
| /p:OnlyPackPlatformSpecificPackages=true | ||
|
LoopedBard3 marked this conversation as resolved.
Outdated
LoopedBard3 marked this conversation as resolved.
Outdated
|
||
| $(_BuildArgs) | ||
| /bl:artifacts/log/Release/Build.arm64.binlog | ||
| workingDirectory: $(_AspNetCoreRoot) | ||
| displayName: Build ARM64 | ||
| env: | ||
| MSBUILDUSESERVER: "1" | ||
|
|
||
| - ${{ if eq(parameters.aspnetcore_x64_windows, true) }}: | ||
| - pwsh: >- | ||
| & "$(_PackScript)" -Rids win-x64 -Format zip -ShippingDir "$(_ShippingDir)" -StagingRoot "$(_StagingRoot)" | ||
| displayName: 'Pack BCS archive (win-x64)' | ||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish BuildArtifacts_windows_x64_Release_aspnetcore' | ||
| inputs: | ||
| targetPath: $(_StagingRoot)\BuildArtifacts_windows_x64_Release_aspnetcore | ||
| artifactName: BuildArtifacts_windows_x64_Release_aspnetcore | ||
|
|
||
| - ${{ if eq(parameters.aspnetcore_x86_windows, true) }}: | ||
| - pwsh: >- | ||
| & "$(_PackScript)" -Rids win-x86 -Format zip -ShippingDir "$(_ShippingDir)" -StagingRoot "$(_StagingRoot)" | ||
| displayName: 'Pack BCS archive (win-x86)' | ||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish BuildArtifacts_windows_x86_Release_aspnetcore' | ||
| inputs: | ||
| targetPath: $(_StagingRoot)\BuildArtifacts_windows_x86_Release_aspnetcore | ||
| artifactName: BuildArtifacts_windows_x86_Release_aspnetcore | ||
|
|
||
| - ${{ if eq(parameters.aspnetcore_arm64_windows, true) }}: | ||
| - pwsh: >- | ||
| & "$(_PackScript)" -Rids win-arm64 -Format zip -ShippingDir "$(_ShippingDir)" -StagingRoot "$(_StagingRoot)" | ||
| displayName: 'Pack BCS archive (win-arm64)' | ||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish BuildArtifacts_windows_arm64_Release_aspnetcore' | ||
| inputs: | ||
| targetPath: $(_StagingRoot)\BuildArtifacts_windows_arm64_Release_aspnetcore | ||
| artifactName: BuildArtifacts_windows_arm64_Release_aspnetcore | ||
|
|
||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish Windows build logs' | ||
| condition: always() | ||
| continueOnError: true | ||
| inputs: | ||
| targetPath: $(_AspNetCoreRoot)\artifacts\log | ||
| artifactName: Windows_perf_build_Logs_Attempt_$(System.JobAttempt) | ||
|
|
||
| # =========================================================================== | ||
| # Linux x64 build job | ||
| # =========================================================================== | ||
| - ${{ if eq(parameters.aspnetcore_x64_linux, true) }}: | ||
| - job: Linux_x64_build | ||
| displayName: 'Build: Linux x64 (perf-build)' | ||
| timeoutInMinutes: 180 | ||
| pool: | ||
| name: $(DncEngInternalBuildPool) | ||
| demands: ImageOverride -equals 1es-ubuntu-2204 | ||
| variables: | ||
| - _AspNetCoreRoot: $(Agent.BuildDirectory)/s/aspnetcore | ||
| - _PackScript: $(Agent.BuildDirectory)/s/performance/eng/pipelines/tools/pack-bcs-archives.ps1 | ||
| - _ShippingDir: $(Agent.BuildDirectory)/s/aspnetcore/artifacts/packages/Release/Shipping | ||
| - _StagingRoot: $(Build.ArtifactStagingDirectory)/bcs | ||
|
LoopedBard3 marked this conversation as resolved.
Outdated
|
||
| steps: | ||
| - checkout: ${{ parameters.aspnetcoreRepoAlias }} | ||
| path: s/aspnetcore | ||
| fetchDepth: 1 | ||
| fetchTags: false | ||
| clean: true | ||
| - checkout: ${{ parameters.performanceRepoAlias }} | ||
| path: s/performance | ||
| fetchDepth: 1 | ||
| fetchTags: false | ||
| clean: true | ||
|
|
||
| - script: >- | ||
| eng/build.sh | ||
| --ci | ||
| --configuration Release | ||
| --arch x64 | ||
| --pack | ||
| --all | ||
| --no-build-java | ||
| -p:OnlyPackPlatformSpecificPackages=true | ||
| $(_BuildArgs) | ||
| /bl:artifacts/log/Release/Build.linux-x64.binlog | ||
| workingDirectory: $(_AspNetCoreRoot) | ||
| displayName: Build linux-x64 | ||
|
|
||
| - pwsh: >- | ||
| & "$(_PackScript)" -Rids linux-x64 -Format targz -ShippingDir "$(_ShippingDir)" -StagingRoot "$(_StagingRoot)" | ||
| displayName: 'Pack BCS archive (linux-x64)' | ||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish BuildArtifacts_linux_x64_Release_aspnetcore' | ||
| inputs: | ||
| targetPath: $(_StagingRoot)/BuildArtifacts_linux_x64_Release_aspnetcore | ||
| artifactName: BuildArtifacts_linux_x64_Release_aspnetcore | ||
|
|
||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish Linux x64 build logs' | ||
| condition: always() | ||
| continueOnError: true | ||
| inputs: | ||
| targetPath: $(_AspNetCoreRoot)/artifacts/log | ||
| artifactName: Linux_x64_perf_build_Logs_Attempt_$(System.JobAttempt) | ||
|
|
||
| # =========================================================================== | ||
| # Linux arm64 build job (cross-build from the x64 host) | ||
| # =========================================================================== | ||
| - ${{ if eq(parameters.aspnetcore_arm64_linux, true) }}: | ||
| - job: Linux_arm64_build | ||
| displayName: 'Build: Linux ARM64 (perf-build)' | ||
| timeoutInMinutes: 180 | ||
| pool: | ||
| name: $(DncEngInternalBuildPool) | ||
| demands: ImageOverride -equals 1es-ubuntu-2204 | ||
| variables: | ||
| - _AspNetCoreRoot: $(Agent.BuildDirectory)/s/aspnetcore | ||
| - _PackScript: $(Agent.BuildDirectory)/s/performance/eng/pipelines/tools/pack-bcs-archives.ps1 | ||
| - _ShippingDir: $(Agent.BuildDirectory)/s/aspnetcore/artifacts/packages/Release/Shipping | ||
| - _StagingRoot: $(Build.ArtifactStagingDirectory)/bcs | ||
|
LoopedBard3 marked this conversation as resolved.
Outdated
|
||
| steps: | ||
| - checkout: ${{ parameters.aspnetcoreRepoAlias }} | ||
| path: s/aspnetcore | ||
| fetchDepth: 1 | ||
| fetchTags: false | ||
| clean: true | ||
| - checkout: ${{ parameters.performanceRepoAlias }} | ||
| path: s/performance | ||
| fetchDepth: 1 | ||
| fetchTags: false | ||
| clean: true | ||
|
|
||
| - script: >- | ||
| eng/build.sh | ||
| --ci | ||
| --configuration Release | ||
| --arch arm64 | ||
| --pack | ||
| --all | ||
| --no-build-java | ||
| -p:OnlyPackPlatformSpecificPackages=true | ||
| $(_BuildArgs) | ||
| /bl:artifacts/log/Release/Build.linux-arm64.binlog | ||
| workingDirectory: $(_AspNetCoreRoot) | ||
| displayName: Build linux-arm64 | ||
|
|
||
| - pwsh: >- | ||
| & "$(_PackScript)" -Rids linux-arm64 -Format targz -ShippingDir "$(_ShippingDir)" -StagingRoot "$(_StagingRoot)" | ||
| displayName: 'Pack BCS archive (linux-arm64)' | ||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish BuildArtifacts_linux_arm64_Release_aspnetcore' | ||
| inputs: | ||
| targetPath: $(_StagingRoot)/BuildArtifacts_linux_arm64_Release_aspnetcore | ||
| artifactName: BuildArtifacts_linux_arm64_Release_aspnetcore | ||
|
|
||
| - task: PublishPipelineArtifact@1 | ||
| displayName: 'Publish Linux arm64 build logs' | ||
| condition: always() | ||
| continueOnError: true | ||
| inputs: | ||
| targetPath: $(_AspNetCoreRoot)/artifacts/log | ||
| artifactName: Linux_arm64_perf_build_Logs_Attempt_$(System.JobAttempt) | ||
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.