From 65e447548965abb521153f383b8da57ce20737d7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 6 Mar 2025 16:51:39 -0800 Subject: [PATCH 01/23] Remove primary vertical concept from JoinVerticals --- eng/Publishing.props | 5 +- .../templates/stages/vmr-build-with-join.yml | 112 + eng/pipelines/templates/stages/vmr-build.yml | 965 +------ .../templates/stages/vmr-verticals.yml | 900 ++++++ .../templates/steps/vmr-join-verticals.yml | 38 +- .../templates/variables/vmr-build.yml | 2 +- .../content/eng/join-verticals.proj | 14 +- .../AzureDevOpsClient.cs | 197 -- .../JoinVerticals.cs | 225 +- .../ManifestAssets/BuildAssetsManifest.cs | 4 +- .../JoinVerticalsAssetSelector.cs | 18 +- .../ManifestAssets/JoinVerticalsConfig.cs | 24 - .../Models/AzureDevOpsArtifactInformation.cs | 9 - .../repo-projects/Directory.Build.props | 13 + .../repo-projects/Directory.Build.targets | 2 + .../content/repo-projects/arcade.proj | 7 + ...VertialsTests.cs => JoinVerticalsTests.cs} | 0 .../verticals/Android_Shortstack_arm.xml | 88 +- .../verticals/Android_Shortstack_arm64.xml | 96 +- .../verticals/Android_Shortstack_x64.xml | 92 +- .../verticals/Android_Shortstack_x86.xml | 88 +- .../AzureLinux_x64_Cross_Alpine_arm.xml | 1224 ++------ .../AzureLinux_x64_Cross_Alpine_arm64.xml | 1248 ++------- .../AzureLinux_x64_Cross_Alpine_x64.xml | 1252 ++------- .../AzureLinux_x64_Cross_Pgo_arm64.xml | 84 +- .../AzureLinux_x64_Cross_Pgo_x64.xml | 84 +- ...64_Cross_ShortStack_Mono_LLVMAOT_arm64.xml | 84 +- ..._x64_Cross_ShortStack_Mono_LLVMAOT_x64.xml | 84 +- .../verticals/AzureLinux_x64_Cross_arm.xml | 1282 ++------- .../verticals/AzureLinux_x64_Cross_arm64.xml | 1362 ++------- .../verticals/AzureLinux_x64_Cross_x64.xml | 1378 ++------- .../Browser_Multithreaded_Shortstack_wasm.xml | 84 +- .../verticals/Browser_Shortstack_wasm.xml | 128 +- .../verticals/LinuxBionic_Shortstack_arm.xml | 306 +- .../LinuxBionic_Shortstack_arm64.xml | 340 +-- .../verticals/LinuxBionic_Shortstack_x64.xml | 340 +-- .../MacCatalyst_Shortstack_arm64.xml | 92 +- .../verticals/MacCatalyst_Shortstack_x64.xml | 92 +- .../OSX_Shortstack_Mono_LLVMAOT_x64.xml | 84 +- .../manifests/verticals/OSX_arm64.xml | 1316 ++------- .../manifests/verticals/OSX_x64.xml | 1316 ++------- .../verticals/Wasi_Shortstack_wasm.xml | 88 +- .../manifests/verticals/Windows_Pgo_arm64.xml | 84 +- .../manifests/verticals/Windows_Pgo_x64.xml | 84 +- .../manifests/verticals/Windows_Pgo_x86.xml | 84 +- .../manifests/verticals/Windows_arm64.xml | 1450 ++-------- .../manifests/verticals/Windows_x64.xml | 2450 +++++++++-------- .../verticals/Windows_x64_BuildPass2.xml | 37 +- .../manifests/verticals/Windows_x86.xml | 1430 ++-------- .../verticals/Windows_x86_BuildPass2.xml | 26 +- .../iOSSimulator_Shortstack_arm64.xml | 88 +- .../verticals/iOSSimulator_Shortstack_x64.xml | 88 +- .../verticals/iOS_Shortstack_arm64.xml | 104 +- .../tvOSSimulator_Shortstack_arm64.xml | 88 +- .../tvOSSimulator_Shortstack_x64.xml | 88 +- .../verticals/tvOS_Shortstack_arm64.xml | 88 +- .../0001-deduplicate-artifacts-in-vmr.patch | 45 + .../0001-use-standard-arcade-publish.patch | 141 + .../0001-deduplicate-artifacts-in-vmr.patch | 42 + 59 files changed, 6921 insertions(+), 14663 deletions(-) create mode 100644 eng/pipelines/templates/stages/vmr-build-with-join.yml create mode 100644 eng/pipelines/templates/stages/vmr-verticals.yml delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/AzureDevOpsClient.cs delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsConfig.cs delete mode 100644 src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/Models/AzureDevOpsArtifactInformation.cs rename src/SourceBuild/content/test/Microsoft.DotNet.Tests/{JoinVertialsTests.cs => JoinVerticalsTests.cs} (100%) create mode 100644 src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch create mode 100644 src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch diff --git a/eng/Publishing.props b/eng/Publishing.props index ceef0240c9bb..264f01ebe787 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -15,11 +15,14 @@ Shipping Release + Vertical + External + Kind="Package" + Visibility="$(FSharpArtifactVisibility)" /> diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml new file mode 100644 index 000000000000..47bbd24c534f --- /dev/null +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -0,0 +1,112 @@ +parameters: +- name: verticalsStages + type: stageList +- name: postJoinStages + type: stageList + default: [] +- name: finalJoinCondition + type: boolean +# These are not expected to be passed it but rather just object variables reused below +- name: pool_Linux + type: object + default: + name: $(defaultPoolName) + image: $(poolImage_Linux) + demands: ImageOverride -equals $(poolImage_Linux) + os: linux + +- name: pool_Windows + type: object + default: + name: $(defaultPoolName) + image: $(poolImage_Windows) + demands: ImageOverride -equals $(poolImage_Windows) + os: windows + +- name: pool_LinuxArm64 + type: object + default: + name: $(poolName_LinuxArm64) + image: $(poolImage_LinuxArm64) + demands: ImageOverride -equals $(poolImage_LinuxArm64) + hostArchitecture: Arm64 + os: linux + +- name: pool_Mac + type: object + default: + name: Azure Pipelines + vmImage: $(poolImage_Mac) + os: macOS + + +- name: pool_Linux_Shortstack + type: object + default: + name: $(shortStackPoolName) + image: $(poolImage_Linux) + demands: ImageOverride -equals $(poolImage_Linux) + os: linux + +stages: +- ${{ each vertical in parameters.verticalsStages }}: + - ${{ insert }}: ${{ vertical }} +- ${{ if parameters.finalJoinCondition }}: + - stage: VMR_Final_Join + displayName: 'VMR Final Join' + dependsOn: ${{ parameters.verticalsStages.*.stage }} + jobs: + - job: FinalJoin + displayName: Final Build Pass + pool: ${{ parameters.pool_Windows }} + timeoutInMinutes: 240 + templateContext: + outputParentDirectory: $(Build.ArtifactStagingDirectory)/artifacts + inputs: + - ${{ each vertical in parameters.verticalsStages.*.jobs.*.job }}: + - input: pipelineArtifact + path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical }} + artifactName: ${{ vertical }}_Artifacts + - input: pipelineArtifact + path: $(Build.ArtifactStagingDirectory)/VerticalManifests + artifactName: VerticalManifests + outputs: + - output: pipelineArtifact + path: $(Build.ArtifactStagingDirectory)/artifacts/MergedManifest.xml + artifact: AssetManifests + displayName: Publish Merged Manifest + sbomEnabled: false + - output: buildArtifacts + PathtoPublish: $(Build.ArtifactStagingDirectory)/artifacts/assets + ArtifactName: BlobArtifacts + displayName: Publish Blob Artifacts + sbomEnabled: false + - output: buildArtifacts + PathtoPublish: $(Build.ArtifactStagingDirectory)/artifacts/packages + ArtifactName: PackageArtifacts + displayName: Publish Package Artifacts + sbomEnabled: false + - output: pipelineArtifact + path: $(Build.ArtifactStagingDirectory)/artifacts/log + artifact: JoinVerticals_BuildLogs_Attempt$(System.JobAttempt) + displayName: Publish Build Logs + sbomEnabled: false + condition: succeededOrFailed() + steps: + - template: ../steps/vmr-join-verticals.yml + parameters: + dotNetBuildPass: final + outputFolder: $(Build.ArtifactStagingDirectory)/artifacts + # Insert all of the validation stages, + # adding a dependency on the final join stage + - ${{ each postJoinStage in parameters.postJoinStages }}: + - stage: ${{ postJoinStage.stage }} + ${{ each pair in postJoinStage }}: + ${{ if notIn(pair.key, 'dependsOn', 'stage') }}: + ${{ pair.key }}: ${{ pair.value }} + dependsOn: + - VMR_Final_Join + # add any dependencies provided via root yaml + - ${{ if ne(postJoinStage.dependsOn, '') }}: + - ${{ each dependency in postJoinStage.dependsOn }}: + - ${{ dependency }} diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml index 40f034c01419..f616663f4d1a 100644 --- a/eng/pipelines/templates/stages/vmr-build.yml +++ b/eng/pipelines/templates/stages/vmr-build.yml @@ -74,923 +74,72 @@ parameters: demands: ImageOverride -equals $(poolImage_Linux) os: linux -#### SOURCE-ONLY BUILD #### stages: -- ${{ if parameters.isSourceOnlyBuild }}: - - stage: VMR_SourceOnly_Build - displayName: VMR Source-Only Build - dependsOn: [] - variables: - - template: ../variables/vmr-build.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} - - jobs: - - ### Jobs for ultralite builds ### - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Online_MsftSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: true # ✅ - runOnline: true # ✅ - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: ${{ format('{0}_Offline_CurrentSourceBuiltSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: true # ✅ - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - reuseBuildArtifactsFrom: - - ${{ format('{0}_Online_MsftSdk_x64', variables.centOSStreamName) }} - - ### Additional jobs for lite/full builds ### - - ${{ if in(parameters.scope, 'lite', 'full') }}: - - - template: ../jobs/vmr-build.yml +- template: vmr-build-with-join.yml + parameters: + verticalsStages: + - template: vmr-verticals.yml parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_MsftSdk', variables.ubuntuName) }} + vmrBranch: ${{ parameters.vmrBranch }} + desiredSigning: ${{ parameters.desiredSigning }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.ubuntuContainerName }} - image: ${{ variables.ubuntuContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml + scope: ${{ parameters.scope }} + finalJoinCondition: ${{ and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }} + postJoinStages: + - stage: Publish_Build_Assets + displayName: Publish Assets + dependsOn: VMR_Final_Join + jobs: + - template: /eng/common/templates-official/job/publish-build-assets.yml@self parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_PreviousSourceBuiltSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - artifactsRid: ${{ variables.centOSStreamX64Rid }} + publishUsingPipelines: true + publishAssetsImmediately: true pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: true # ✅ - excludeOmniSharpTests: true # ✅ - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: true # ✅ - - ### Additional jobs for full build ### - - ${{ if in(parameters.scope, 'full') }}: - - # This AlmaLinux leg is intended to build with the min supported glibc version - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_MsftSdk', variables.almaLinuxName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.almaLinuxContainerName }} - image: ${{ variables.almaLinuxContainerImage }} - targetRid: ${{ variables.almaLinuxX64Rid }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: true # ✅ - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_MsftSdk', variables.alpineName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.alpineContainerName }} - image: ${{ variables.alpineContainerImage }} - targetRid: ${{ variables.alpineX64Rid }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: true # ✅ - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_MsftSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: true # ✅ - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Online_PreviousSourceBuiltSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - artifactsRid: ${{ variables.centOSStreamX64Rid }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: true # ✅ - useMonoRuntime: false # 🚫 - withPreviousSDK: true # ✅ - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Mono_Offline_MsftSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: true # ✅ - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: true # ✅ - runOnline: false # 🚫 - useMonoRuntime: true # ✅ - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.fedoraContainerName }} - image: ${{ variables.fedoraContainerImage }} - buildFromArchive: true # ✅ - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}Arm64_Offline_MsftSdk', variables.ubuntuName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: arm64 - pool: ${{ parameters.pool_LinuxArm64 }} - container: - name: ${{ variables.ubuntuArmContainerName }} - image: ${{ variables.ubuntuArmContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Offline_CurrentSourceBuiltSdk', variables.fedoraName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.fedoraContainerName }} - image: ${{ variables.fedoraContainerImage }} - buildFromArchive: false # 🚫 - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: false # 🚫 - runOnline: false # 🚫 - useMonoRuntime: false # 🚫 - withPreviousSDK: false # 🚫 - reuseBuildArtifactsFrom: - - ${{ format('{0}_Offline_MsftSdk_x64', variables.fedoraName) }} - - - template: ../jobs/vmr-build.yml - parameters: - # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline - buildName: ${{ format('{0}_Mono_Offline_CurrentSourceBuiltSdk', variables.centOSStreamName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - targetArchitecture: x64 - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.centOSStreamContainerName }} - image: ${{ variables.centOSStreamContainerImage }} - buildFromArchive: true # ✅ - buildSourceOnly: true # ✅ - enablePoison: false # 🚫 - excludeOmniSharpTests: true # ✅ - runOnline: false # 🚫 - useMonoRuntime: true # ✅ - withPreviousSDK: false # 🚫 - reuseBuildArtifactsFrom: - - ${{ format('{0}_Mono_Offline_MsftSdk_x64', variables.centOSStreamName) }} - -#### VERTICAL BUILD (Validation) #### -- ${{ if and(not(parameters.isSourceOnlyBuild), or(eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.TeamProject'], 'internal'))) }}: - - stage: VMR_Vertical_Build_Validation - displayName: VMR Vertical Build Validation - dependsOn: [] - variables: - - template: ../variables/vmr-build.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} - jobs: - - - template: ../jobs/vmr-build.yml - parameters: - buildName: ${{ format('{0}_Ubuntu_BuildTests', variables.ubuntuName) }} - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.ubuntuContainerName }} - image: ${{ variables.ubuntuContainerImage }} - targetOS: linux - targetArchitecture: x64 - extraProperties: /p:DotNetBuildTests=true - - - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}: - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows_BuildTests - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x64 - extraProperties: /p:DotNetBuildTests=true - -#### VERTICAL BUILD (Official) #### -- ${{ if not(parameters.isSourceOnlyBuild) }}: - - stage: VMR_Vertical_Build - displayName: VMR Vertical Build - dependsOn: [] - variables: - - template: ../variables/vmr-build.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} - desiredSigning: ${{ parameters.desiredSigning }} - jobs: - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x64 - enableIBCOptimization: ${{ variables.ibcEnabled }} - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x86 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Android_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.androidCrossContainerName }} - image: ${{ variables.androidCrossContainerImage }} - targetOS: android - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Browser_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.browserCrossContainerName }} - image: ${{ variables.browserCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: browser - targetArchitecture: wasm - - - template: ../jobs/vmr-build.yml - parameters: - buildName: iOSSimulator_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: iossimulator - targetArchitecture: arm64 - - ### Additional jobs for full build ### - - ${{ if in(parameters.scope, 'full') }}: - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Android_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.androidCrossContainerName }} - image: ${{ variables.androidCrossContainerImage }} - targetOS: android - targetArchitecture: arm - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Android_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.androidCrossContainerName }} - image: ${{ variables.androidCrossContainerImage }} - targetOS: android - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Android_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.androidCrossContainerName }} - image: ${{ variables.androidCrossContainerImage }} - targetOS: android - targetArchitecture: x86 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Browser_Multithreaded_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.browserCrossContainerName }} - image: ${{ variables.browserCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: browser - targetArchitecture: wasm - extraProperties: /p:DotNetBuildRuntimeWasmEnableThreads=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: LinuxBionic_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.linuxBionicCrossContainerName }} - image: ${{ variables.linuxBionicCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: linux-bionic - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: LinuxBionic_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.linuxBionicCrossContainerName }} - image: ${{ variables.linuxBionicCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: linux-bionic - targetArchitecture: arm - - - template: ../jobs/vmr-build.yml - parameters: - buildName: LinuxBionic_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.linuxBionicCrossContainerName }} - image: ${{ variables.linuxBionicCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: linux-bionic - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: iOS_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: ios - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: iOSSimulator_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: iossimulator - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: MacCatalyst_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: maccatalyst - targetArchitecture: arm64 - - template: ../jobs/vmr-build.yml - parameters: - buildName: MacCatalyst_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: maccatalyst - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: tvOS_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: tvos - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: tvOSSimulator_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: tvossimulator - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: tvOSSimulator_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: tvossimulator - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Wasi_Shortstack - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.wasiCrossContainerName }} - image: ${{ variables.wasiCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: wasi - targetArchitecture: wasm - - - template: ../jobs/vmr-build.yml - parameters: - buildName: OSX - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: osx - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: OSX_Shortstack_Mono_LLVMAOT - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - useMonoRuntime: true - targetOS: osx - targetArchitecture: x64 - extraProperties: /p:DotNetBuildMonoEnableLLVM=true /p:DotNetBuildMonoAOTEnableLLVM=true /p:DotNetBuildMonoBundleLLVMOptimizer=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxX64CrossContainerName }} - image: ${{ variables.azurelinuxX64CrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: linux - targetArchitecture: x64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Pgo - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: false - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxX64CrossContainerName }} - image: ${{ variables.azurelinuxX64CrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: linux - targetArchitecture: x64 - extraProperties: /p:PgoInstrument=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Shortstack_Mono_LLVMAOT - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.azurelinuxX64CrossContainerName }} - image: ${{ variables.azurelinuxX64CrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - useMonoRuntime: true - targetOS: linux - targetArchitecture: x64 - extraProperties: /p:DotNetBuildMonoEnableLLVM=true /p:DotNetBuildMonoAOTEnableLLVM=true /p:DotNetBuildMonoBundleLLVMOptimizer=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxArmCrossContainerName }} - image: ${{ variables.azurelinuxArmCrossContainerImage }} - crossRootFs: '/crossrootfs/arm' - targetOS: linux - targetArchitecture: arm - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxArm64CrossContainerName }} - image: ${{ variables.azurelinuxArm64CrossContainerImage }} - crossRootFs: '/crossrootfs/arm64' - targetOS: linux - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Pgo - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: false - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxArm64CrossContainerName }} - image: ${{ variables.azurelinuxArm64CrossContainerImage }} - crossRootFs: '/crossrootfs/arm64' - targetOS: linux - targetArchitecture: arm64 - extraProperties: /p:PgoInstrument=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Alpine - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxX64MuslCrossContainerName }} - image: ${{ variables.azurelinuxX64MuslCrossContainerImage }} - crossRootFs: '/crossrootfs/x64' - targetOS: linux-musl - targetArchitecture: x64 - targetRid: ${{ variables.linuxMuslX64Rid }} - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Alpine - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxArmMuslCrossContainerName }} - image: ${{ variables.azurelinuxArmMuslCrossContainerImage }} - crossRootFs: '/crossrootfs/arm' - targetOS: linux-musl - targetArchitecture: arm - targetRid: ${{ variables.linuxMuslArmRid }} - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Alpine - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux }} - container: - name: ${{ variables.azurelinuxArm64MuslCrossContainerName }} - image: ${{ variables.azurelinuxArm64MuslCrossContainerImage }} - crossRootFs: '/crossrootfs/arm64' - targetOS: linux-musl - targetArchitecture: arm64 - targetRid: ${{ variables.linuxMuslArm64Rid }} - - - template: ../jobs/vmr-build.yml - parameters: - buildName: AzureLinux_x64_Cross_Shortstack_Mono_LLVMAOT - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Linux_Shortstack }} - container: - name: ${{ variables.azurelinuxArm64CrossContainerName }} - image: ${{ variables.azurelinuxArm64CrossContainerImage }} - crossRootFs: '/crossrootfs/arm64' - useMonoRuntime: true - targetOS: linux - targetArchitecture: arm64 - extraProperties: /p:DotNetBuildMonoEnableLLVM=true /p:DotNetBuildMonoAOTEnableLLVM=true /p:DotNetBuildMonoBundleLLVMOptimizer=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: OSX - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Mac }} - targetOS: osx - targetArchitecture: arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: arm64 - enableIBCOptimization: ${{ variables.ibcEnabled }} - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows_Pgo - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: false - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x64 - extraProperties: /p:PgoInstrument=true - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows_Pgo - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: false - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x86 - extraProperties: /p:PgoInstrument=true - enableIBCOptimization: ${{ variables.ibcEnabled }} - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows_Pgo - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: false - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: arm64 - extraProperties: /p:PgoInstrument=true - - # Build Pass 2 verticals - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - sign: ${{ variables.signEnabled }} - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x64 - buildPass: 2 - reuseBuildArtifactsFrom: - - Windows_x64 - - Windows_x86 - - Windows_arm64 - - - template: ../jobs/vmr-build.yml - parameters: - buildName: Windows - isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} - vmrBranch: ${{ variables.VmrBranch }} - pool: ${{ parameters.pool_Windows }} - targetOS: windows - targetArchitecture: x86 - buildPass: 2 - reuseBuildArtifactsFrom: - - AzureLinux_x64_Cross_x64 - - AzureLinux_x64_Cross_Alpine_x64 - - AzureLinux_x64_Cross_arm64 - - AzureLinux_x64_Cross_Alpine_arm64 - - AzureLinux_x64_Cross_arm - - AzureLinux_x64_Cross_Alpine_arm - -### FINAL JOIN ### -- ${{ if and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - - stage: VMR_Final_Join - displayName: VMR Final Join - dependsOn: VMR_Vertical_Build - variables: - - template: ../variables/vmr-build.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} - jobs: - - job: FinalJoin - displayName: Final Build Pass - pool: ${{ parameters.pool_Windows }} - timeoutInMinutes: 240 - templateContext: - outputParentDirectory: $(Build.ArtifactStagingDirectory)/artifacts - outputs: - - output: pipelineArtifact - path: $(Build.ArtifactStagingDirectory)/artifacts/MergedManifest.xml - artifact: AssetManifests - displayName: Publish Merged Manifest - sbomEnabled: false - - output: buildArtifacts - PathtoPublish: $(Build.ArtifactStagingDirectory)/artifacts/assets - ArtifactName: BlobArtifacts - displayName: Publish Blob Artifacts - sbomEnabled: false - - output: buildArtifacts - PathtoPublish: $(Build.ArtifactStagingDirectory)/artifacts/packages - ArtifactName: PackageArtifacts - displayName: Publish Package Artifacts - sbomEnabled: false - steps: - - template: ../steps/vmr-join-verticals.yml - parameters: - dotNetBuildPass: final - primaryDependentJob: Windows_x64 - outputFolder: $(Build.ArtifactStagingDirectory)/artifacts - - - stage: Publish_Build_Assets - displayName: Publish Assets - dependsOn: VMR_Final_Join - jobs: - - template: /eng/common/templates-official/job/publish-build-assets.yml@self - parameters: - publishUsingPipelines: true - publishAssetsImmediately: true - pool: ${{ parameters.pool_Linux }} - - - stage: VMR_Validation - displayName: VMR Validation - dependsOn: VMR_Final_Join - variables: + - stage: VMR_Validation + displayName: VMR Validation + variables: - group: Release-Pipeline - group: DotNetBot-GitHub-AllBranches - jobs: - - job: ValidateAssetBaselines - displayName: Validate Asset Baselines - pool: ${{ parameters.pool_Windows }} - timeoutInMinutes: 180 - steps: - - template: ../steps/vmr-validate-asset-baseline.yml - parameters: - continueOnError: true - - ${{ if eq(variables.signEnabled, 'true') }}: - - job: ValidateSigning_Windows - displayName: Validate Signing - Windows + jobs: + - job: ValidateAssetBaselines + displayName: Validate Asset Baselines pool: ${{ parameters.pool_Windows }} - timeoutInMinutes: 240 + timeoutInMinutes: 180 steps: - - template: ../steps/vmr-validate-signing.yml + - template: ../steps/vmr-validate-asset-baseline.yml parameters: - artifactName: PackageArtifacts continueOnError: true - OS: Windows_NT - - job: ValidateSigning_Mac - displayName: Validate Signing - Mac - pool: ${{ parameters.pool_Mac }} - timeoutInMinutes: 240 - steps: - - template: ../steps/vmr-validate-signing.yml - parameters: - artifactName: BlobArtifacts - continueOnError: true - OS: Darwin - - job: ValidateSigning_Linux - displayName: Validate Signing - Linux - pool: ${{ parameters.pool_Linux }} - timeoutInMinutes: 240 - steps: - - template: ../steps/vmr-validate-signing.yml - parameters: - artifactName: BlobArtifacts - continueOnError: true - OS: Linux + - ${{ if eq(variables.signEnabled, 'true') }}: + - job: ValidateSigning_Windows + displayName: Validate Signing - Windows + pool: ${{ parameters.pool_Windows }} + timeoutInMinutes: 240 + steps: + - template: ../steps/vmr-validate-signing.yml + parameters: + artifactName: PackageArtifacts + continueOnError: true + OS: Windows_NT + + - job: ValidateSigning_Mac + displayName: Validate Signing - Mac + pool: ${{ parameters.pool_Mac }} + timeoutInMinutes: 240 + steps: + - template: ../steps/vmr-validate-signing.yml + parameters: + artifactName: BlobArtifacts + continueOnError: true + OS: Darwin + + - job: ValidateSigning_Linux + displayName: Validate Signing - Linux + pool: ${{ parameters.pool_Linux }} + timeoutInMinutes: 240 + steps: + - template: ../steps/vmr-validate-signing.yml + parameters: + artifactName: BlobArtifacts + continueOnError: true + OS: Linux diff --git a/eng/pipelines/templates/stages/vmr-verticals.yml b/eng/pipelines/templates/stages/vmr-verticals.yml new file mode 100644 index 000000000000..626283ee1722 --- /dev/null +++ b/eng/pipelines/templates/stages/vmr-verticals.yml @@ -0,0 +1,900 @@ +### This stage builds https://github.com/dotnet/dotnet with varying parameters +### If run in a PR, new changes are applied to a local copy of the VMR, then it is built and tested + +parameters: +# Branch of the VMR to use (to push to for internal builds) +- name: vmrBranch + type: string + default: $(Build.SourceBranch) + +- name: desiredSigning + type: string + default: '' + +# Scope of jobs which are executed +- name: scope + type: string + values: + # run 1 leg for smoke tests + - ultralite + # run several legs e.g. win/linux/mac for basic testing + - lite + # run everything + - full + +# True when build is running from dotnet/dotnet directly +- name: isBuiltFromVmr + type: boolean + default: false + +# True when building the VMR in source-only mode +- name: isSourceOnlyBuild + type: boolean + default: false + +# These are not expected to be passed it but rather just object variables reused below +- name: pool_Linux + type: object + default: + name: $(defaultPoolName) + image: $(poolImage_Linux) + demands: ImageOverride -equals $(poolImage_Linux) + os: linux + +- name: pool_Windows + type: object + default: + name: $(defaultPoolName) + image: $(poolImage_Windows) + demands: ImageOverride -equals $(poolImage_Windows) + os: windows + +- name: pool_LinuxArm64 + type: object + default: + name: $(poolName_LinuxArm64) + image: $(poolImage_LinuxArm64) + demands: ImageOverride -equals $(poolImage_LinuxArm64) + hostArchitecture: Arm64 + os: linux + +- name: pool_Mac + type: object + default: + name: Azure Pipelines + vmImage: $(poolImage_Mac) + os: macOS + + +- name: pool_Linux_Shortstack + type: object + default: + name: $(shortStackPoolName) + image: $(poolImage_Linux) + demands: ImageOverride -equals $(poolImage_Linux) + os: linux + +#### SOURCE-ONLY BUILD #### +stages: +- ${{ if parameters.isSourceOnlyBuild }}: + - stage: VMR_SourceOnly_Build + displayName: VMR Source-Only Build + dependsOn: [] + variables: + - template: ../variables/vmr-build.yml + parameters: + vmrBranch: ${{ parameters.vmrBranch }} + + jobs: + + ### Jobs for ultralite builds ### + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Online_MsftSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: true # ✅ + runOnline: true # ✅ + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: ${{ format('{0}_Offline_CurrentSourceBuiltSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: true # ✅ + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + reuseBuildArtifactsFrom: + - ${{ format('{0}_Online_MsftSdk_x64', variables.centOSStreamName) }} + + ### Additional jobs for lite/full builds ### + - ${{ if in(parameters.scope, 'lite', 'full') }}: + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_MsftSdk', variables.ubuntuName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.ubuntuContainerName }} + image: ${{ variables.ubuntuContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: false # 🚫 + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_PreviousSourceBuiltSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + artifactsRid: ${{ variables.centOSStreamX64Rid }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: true # ✅ + excludeOmniSharpTests: true # ✅ + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: true # ✅ + + ### Additional jobs for full build ### + - ${{ if in(parameters.scope, 'full') }}: + + # This AlmaLinux leg is intended to build with the min supported glibc version + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_MsftSdk', variables.almaLinuxName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.almaLinuxContainerName }} + image: ${{ variables.almaLinuxContainerImage }} + targetRid: ${{ variables.almaLinuxX64Rid }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: true # ✅ + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_MsftSdk', variables.alpineName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.alpineContainerName }} + image: ${{ variables.alpineContainerImage }} + targetRid: ${{ variables.alpineX64Rid }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: true # ✅ + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_MsftSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: true # ✅ + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: false # 🚫 + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Online_PreviousSourceBuiltSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + artifactsRid: ${{ variables.centOSStreamX64Rid }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: false # 🚫 + runOnline: true # ✅ + useMonoRuntime: false # 🚫 + withPreviousSDK: true # ✅ + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Mono_Offline_MsftSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: true # ✅ + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: true # ✅ + runOnline: false # 🚫 + useMonoRuntime: true # ✅ + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_MsftSdk', variables.fedoraName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.fedoraContainerName }} + image: ${{ variables.fedoraContainerImage }} + buildFromArchive: true # ✅ + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: false # 🚫 + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}Arm64_Offline_MsftSdk', variables.ubuntuName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: arm64 + pool: ${{ parameters.pool_LinuxArm64 }} + container: + name: ${{ variables.ubuntuArmContainerName }} + image: ${{ variables.ubuntuArmContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: false # 🚫 + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Offline_CurrentSourceBuiltSdk', variables.fedoraName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.fedoraContainerName }} + image: ${{ variables.fedoraContainerImage }} + buildFromArchive: false # 🚫 + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: false # 🚫 + runOnline: false # 🚫 + useMonoRuntime: false # 🚫 + withPreviousSDK: false # 🚫 + reuseBuildArtifactsFrom: + - ${{ format('{0}_Offline_MsftSdk_x64', variables.fedoraName) }} + + - template: ../jobs/vmr-build.yml + parameters: + # Changing the build name requires updating the referenced name in the source-build-sdk-diff-tests.yml pipeline + buildName: ${{ format('{0}_Mono_Offline_CurrentSourceBuiltSdk', variables.centOSStreamName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + targetArchitecture: x64 + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.centOSStreamContainerName }} + image: ${{ variables.centOSStreamContainerImage }} + buildFromArchive: true # ✅ + buildSourceOnly: true # ✅ + enablePoison: false # 🚫 + excludeOmniSharpTests: true # ✅ + runOnline: false # 🚫 + useMonoRuntime: true # ✅ + withPreviousSDK: false # 🚫 + reuseBuildArtifactsFrom: + - ${{ format('{0}_Mono_Offline_MsftSdk_x64', variables.centOSStreamName) }} + +#### VERTICAL BUILD (Validation) #### +- ${{ if and(not(parameters.isSourceOnlyBuild), or(eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.TeamProject'], 'internal'))) }}: + - stage: VMR_Vertical_Build_Validation + displayName: VMR Vertical Build Validation + dependsOn: [] + variables: + - template: ../variables/vmr-build.yml + parameters: + vmrBranch: ${{ parameters.vmrBranch }} + jobs: + + - template: ../jobs/vmr-build.yml + parameters: + buildName: ${{ format('{0}_Ubuntu_BuildTests', variables.ubuntuName) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.ubuntuContainerName }} + image: ${{ variables.ubuntuContainerImage }} + targetOS: linux + targetArchitecture: x64 + extraProperties: /p:DotNetBuildTests=true + + - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}: + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows_BuildTests + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x64 + extraProperties: /p:DotNetBuildTests=true + +#### VERTICAL BUILD (Official) #### +- ${{ if not(parameters.isSourceOnlyBuild) }}: + - stage: VMR_Vertical_Build + displayName: VMR Vertical Build + dependsOn: [] + variables: + - template: ../variables/vmr-build.yml + parameters: + vmrBranch: ${{ parameters.vmrBranch }} + desiredSigning: ${{ parameters.desiredSigning }} + jobs: + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x64 + enableIBCOptimization: ${{ variables.ibcEnabled }} + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x86 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Android_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.androidCrossContainerName }} + image: ${{ variables.androidCrossContainerImage }} + targetOS: android + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Browser_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.browserCrossContainerName }} + image: ${{ variables.browserCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: browser + targetArchitecture: wasm + + - template: ../jobs/vmr-build.yml + parameters: + buildName: iOSSimulator_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: iossimulator + targetArchitecture: arm64 + + ### Additional jobs for full build ### + - ${{ if in(parameters.scope, 'full') }}: + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Android_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.androidCrossContainerName }} + image: ${{ variables.androidCrossContainerImage }} + targetOS: android + targetArchitecture: arm + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Android_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.androidCrossContainerName }} + image: ${{ variables.androidCrossContainerImage }} + targetOS: android + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Android_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.androidCrossContainerName }} + image: ${{ variables.androidCrossContainerImage }} + targetOS: android + targetArchitecture: x86 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Browser_Multithreaded_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.browserCrossContainerName }} + image: ${{ variables.browserCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: browser + targetArchitecture: wasm + extraProperties: /p:DotNetBuildRuntimeWasmEnableThreads=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: LinuxBionic_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.linuxBionicCrossContainerName }} + image: ${{ variables.linuxBionicCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: linux-bionic + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: LinuxBionic_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.linuxBionicCrossContainerName }} + image: ${{ variables.linuxBionicCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: linux-bionic + targetArchitecture: arm + + - template: ../jobs/vmr-build.yml + parameters: + buildName: LinuxBionic_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.linuxBionicCrossContainerName }} + image: ${{ variables.linuxBionicCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: linux-bionic + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: iOS_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: ios + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: iOSSimulator_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: iossimulator + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: MacCatalyst_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: maccatalyst + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: MacCatalyst_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: maccatalyst + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: tvOS_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: tvos + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: tvOSSimulator_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: tvossimulator + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: tvOSSimulator_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: tvossimulator + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Wasi_Shortstack + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.wasiCrossContainerName }} + image: ${{ variables.wasiCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: wasi + targetArchitecture: wasm + + - template: ../jobs/vmr-build.yml + parameters: + buildName: OSX + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: osx + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: OSX_Shortstack_Mono_LLVMAOT + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + useMonoRuntime: true + targetOS: osx + targetArchitecture: x64 + extraProperties: /p:DotNetBuildMonoEnableLLVM=true /p:DotNetBuildMonoAOTEnableLLVM=true /p:DotNetBuildMonoBundleLLVMOptimizer=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxX64CrossContainerName }} + image: ${{ variables.azurelinuxX64CrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: linux + targetArchitecture: x64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Pgo + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: false + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxX64CrossContainerName }} + image: ${{ variables.azurelinuxX64CrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: linux + targetArchitecture: x64 + extraProperties: /p:PgoInstrument=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Shortstack_Mono_LLVMAOT + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.azurelinuxX64CrossContainerName }} + image: ${{ variables.azurelinuxX64CrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + useMonoRuntime: true + targetOS: linux + targetArchitecture: x64 + extraProperties: /p:DotNetBuildMonoEnableLLVM=true /p:DotNetBuildMonoAOTEnableLLVM=true /p:DotNetBuildMonoBundleLLVMOptimizer=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxArmCrossContainerName }} + image: ${{ variables.azurelinuxArmCrossContainerImage }} + crossRootFs: '/crossrootfs/arm' + targetOS: linux + targetArchitecture: arm + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxArm64CrossContainerName }} + image: ${{ variables.azurelinuxArm64CrossContainerImage }} + crossRootFs: '/crossrootfs/arm64' + targetOS: linux + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Pgo + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: false + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxArm64CrossContainerName }} + image: ${{ variables.azurelinuxArm64CrossContainerImage }} + crossRootFs: '/crossrootfs/arm64' + targetOS: linux + targetArchitecture: arm64 + extraProperties: /p:PgoInstrument=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Alpine + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxX64MuslCrossContainerName }} + image: ${{ variables.azurelinuxX64MuslCrossContainerImage }} + crossRootFs: '/crossrootfs/x64' + targetOS: linux-musl + targetArchitecture: x64 + targetRid: ${{ variables.linuxMuslX64Rid }} + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Alpine + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxArmMuslCrossContainerName }} + image: ${{ variables.azurelinuxArmMuslCrossContainerImage }} + crossRootFs: '/crossrootfs/arm' + targetOS: linux-musl + targetArchitecture: arm + targetRid: ${{ variables.linuxMuslArmRid }} + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Alpine + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux }} + container: + name: ${{ variables.azurelinuxArm64MuslCrossContainerName }} + image: ${{ variables.azurelinuxArm64MuslCrossContainerImage }} + crossRootFs: '/crossrootfs/arm64' + targetOS: linux-musl + targetArchitecture: arm64 + targetRid: ${{ variables.linuxMuslArm64Rid }} + + - template: ../jobs/vmr-build.yml + parameters: + buildName: AzureLinux_x64_Cross_Shortstack_Mono_LLVMAOT + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Linux_Shortstack }} + container: + name: ${{ variables.azurelinuxArm64CrossContainerName }} + image: ${{ variables.azurelinuxArm64CrossContainerImage }} + crossRootFs: '/crossrootfs/arm64' + useMonoRuntime: true + targetOS: linux + targetArchitecture: arm64 + extraProperties: /p:DotNetBuildMonoEnableLLVM=true /p:DotNetBuildMonoAOTEnableLLVM=true /p:DotNetBuildMonoBundleLLVMOptimizer=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: OSX + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Mac }} + targetOS: osx + targetArchitecture: arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: arm64 + enableIBCOptimization: ${{ variables.ibcEnabled }} + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows_Pgo + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: false + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x64 + extraProperties: /p:PgoInstrument=true + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows_Pgo + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: false + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x86 + extraProperties: /p:PgoInstrument=true + enableIBCOptimization: ${{ variables.ibcEnabled }} + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows_Pgo + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: false + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: arm64 + extraProperties: /p:PgoInstrument=true + + # Build Pass 2 verticals + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + sign: ${{ variables.signEnabled }} + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x64 + buildPass: 2 + reuseBuildArtifactsFrom: + - Windows_x64 + - Windows_x86 + - Windows_arm64 + + - template: ../jobs/vmr-build.yml + parameters: + buildName: Windows + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} + vmrBranch: ${{ variables.VmrBranch }} + pool: ${{ parameters.pool_Windows }} + targetOS: windows + targetArchitecture: x86 + buildPass: 2 + reuseBuildArtifactsFrom: + - AzureLinux_x64_Cross_x64 + - AzureLinux_x64_Cross_Alpine_x64 + - AzureLinux_x64_Cross_arm64 + - AzureLinux_x64_Cross_Alpine_arm64 + - AzureLinux_x64_Cross_arm + - AzureLinux_x64_Cross_Alpine_arm diff --git a/eng/pipelines/templates/steps/vmr-join-verticals.yml b/eng/pipelines/templates/steps/vmr-join-verticals.yml index 50b1866b098f..6d249d47a61a 100644 --- a/eng/pipelines/templates/steps/vmr-join-verticals.yml +++ b/eng/pipelines/templates/steps/vmr-join-verticals.yml @@ -3,35 +3,27 @@ parameters: type: string default: final -- name: primaryDependentJob - type: string - default: Windows_x64 +- name: verticals + type: object + default: [] - name: outputFolder type: string default: $(Build.ArtifactStagingDirectory)/artifacts steps: -- task: DownloadBuildArtifacts@1 - inputs: - artifactName: 'VerticalManifests' - downloadPath: $(Build.ArtifactStagingDirectory) - checkDownloadedFiles: true - -- task: DownloadPipelineArtifact@2 - inputs: - artifactName: ${{ parameters.primaryDependentJob }}_Artifacts - targetPath: $(Build.ArtifactStagingDirectory)/${{ parameters.primaryDependentJob }}_Artifacts - checkDownloadedFiles: true - - powershell: eng/join-verticals.ps1 - /p:VerticalManifestsPath=$(Build.ArtifactStagingDirectory)/VerticalManifests - /p:MainVertical=${{ parameters.primaryDependentJob }} + /p:VerticalManifestsPath=$(Build.ArtifactStagingDirectory)/VerticalManifests /p:DotNetBuildPass=${{ parameters.dotNetBuildPass }} - /p:BuildId=$(Build.BuildId) - /p:AzureDevOpsToken=$(System.AccessToken) - /p:AzureDevOpsBaseUri=$(System.CollectionUri) - /p:AzureDevOpsProject=$(System.TeamProject) - /p:MainVerticalArtifactsFolder=$(Build.ArtifactStagingDirectory)/${{ parameters.primaryDependentJob }}_Artifacts + /p:VerticalArtifactsBaseFolder=$(Build.ArtifactStagingDirectory)/VerticalArtifacts /p:OutputFolder=${{ parameters.outputFolder }} - displayName: Join Verticals \ No newline at end of file + displayName: Join Verticals +- task: CopyFiles@2 + displayName: Copy logs for upload + inputs: + SourceFolder: '$(Build.SourcesDirectory)/artifacts/log' + Contents: | + **/*.log + **/*.binlog + TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/log' + CleanTargetFolder: true diff --git a/eng/pipelines/templates/variables/vmr-build.yml b/eng/pipelines/templates/variables/vmr-build.yml index 1a68a230fa3f..c7c8dc3ae49e 100644 --- a/eng/pipelines/templates/variables/vmr-build.yml +++ b/eng/pipelines/templates/variables/vmr-build.yml @@ -29,7 +29,7 @@ variables: ## Note: The use of if expressons underneath the variable is necessary to get the updated isOfficialBuild value - name: ibcEnabled ${{ if eq(variables['isOfficialBuild'], true) }}: - value: true + value: false ${{ else }}: value: false diff --git a/src/SourceBuild/content/eng/join-verticals.proj b/src/SourceBuild/content/eng/join-verticals.proj index e085205fb67f..d812b0f14f18 100644 --- a/src/SourceBuild/content/eng/join-verticals.proj +++ b/src/SourceBuild/content/eng/join-verticals.proj @@ -12,27 +12,17 @@ - - - - - + - diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/AzureDevOpsClient.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/AzureDevOpsClient.cs deleted file mode 100644 index 17d4b2e859ce..000000000000 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/AzureDevOpsClient.cs +++ /dev/null @@ -1,197 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using System; -using System.IO; -using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Net.Http.Json; -using System.Text; -using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; - -namespace Microsoft.DotNet.UnifiedBuild.Tasks; - -public class AzureDevOpsClient : IDisposable -{ - private readonly HttpClient _httpClient; - private readonly TaskLoggingHelper _logger; - - private const string _azureDevOpsApiVersion = "7.1-preview.5"; - // download in 100 MB chunks - private const int _downloadBufferSize = 1024 * 1024 * 100; - private const int _httpTimeoutSeconds = 300; - - public AzureDevOpsClient( - string? azureDevOpsToken, - string azureDevOpsBaseUri, - string azureDevOpsProject, - TaskLoggingHelper logger) - { - - _logger = logger; - - _httpClient = new(new HttpClientHandler { CheckCertificateRevocationList = true }); - - _httpClient.BaseAddress = new Uri($"{azureDevOpsBaseUri}/{azureDevOpsProject}/_apis/"); - - _httpClient.Timeout = TimeSpan.FromSeconds(_httpTimeoutSeconds); - - if (!string.IsNullOrEmpty(azureDevOpsToken)) - { - _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( - "Basic", - Convert.ToBase64String(Encoding.UTF8.GetBytes($":{azureDevOpsToken}"))); - } - } - - /// - /// Downloads a build artifact as zip file - /// - public async Task DownloadArtifactZip(string buildId, string artifactName, string downloadPath, int retryCount) - { - var artifactInformation = await GetArtifactInformation(buildId, artifactName, retryCount); - string downloadUrl = artifactInformation.Resource.DownloadUrl; - - _logger.LogMessage(MessageImportance.High, $"Downloading artifact zip from {downloadUrl}"); - - try - { - using HttpResponseMessage httpResponse = await ExecuteApiCallWithRetry(downloadUrl, retryCount); - using Stream readStream = await httpResponse.Content.ReadAsStreamAsync(); - using FileStream writeStream = File.Create(downloadPath); - - await readStream.CopyToAsync(writeStream, _downloadBufferSize); - } - catch (Exception ex) - { - _logger.LogError($"Failed to download artifact zip: {ex.Message}"); - throw; - } - } - - public async Task DownloadSingleFileFromArtifact(string buildId, string artifactName, string itemId, string itemSubPath, string downloadPath, int retryCount) - { - try - { - var downloadFileUrl = $"build/builds/{buildId}/artifacts?artifactName={artifactName}&fileId={itemId}&fileName={itemSubPath}&api-version={_azureDevOpsApiVersion}"; - - _logger.LogMessage(MessageImportance.High, $"Downloading file {itemSubPath} from {downloadFileUrl}"); - - using HttpResponseMessage fileDownloadResponse = await ExecuteApiCallWithRetry(downloadFileUrl, retryCount); - using Stream readStream = await fileDownloadResponse.Content.ReadAsStreamAsync(); - using FileStream writeStream = File.Create(downloadPath); - - await readStream.CopyToAsync(writeStream, _downloadBufferSize); - } - catch (Exception ex) - { - _logger.LogError($"Failed to download file: {ex.Message}"); - throw; - } - } - - public async Task GetArtifactFilesInformation(string buildId, string artifactName, int retryCount) - { - var artifactInformation = await GetArtifactInformation(buildId, artifactName, retryCount); - string artifactId = artifactInformation.Resource.Data; - - var getManifestUrl = $"build/builds/{buildId}/artifacts?artifactName={artifactName}&fileId={artifactId}&fileName={artifactName}&api-version={_azureDevOpsApiVersion}"; - - _logger.LogMessage(MessageImportance.High, $"Getting {artifactName} artifact manifest"); - - try - { - using HttpResponseMessage httpResponse = await ExecuteApiCallWithRetry(getManifestUrl, retryCount); - - ArtifactFiles filesInformation = await httpResponse.Content.ReadFromJsonAsync() - ?? throw new ArgumentException($"Couldn't parse AzDo response {httpResponse.Content} to {nameof(ArtifactFiles)}"); - - return filesInformation; - } - catch (Exception ex) - { - _logger.LogError($"Failed to download file: {ex.Message}"); - throw; - } - } - - public async Task GetArtifactInformation(string buildId, string artifactName, int retryCount) - { - string relativeUrl = $"build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version={_azureDevOpsApiVersion}"; - - _logger.LogMessage(MessageImportance.High, $"Getting {artifactName} metadata from {relativeUrl}"); - - try - { - using HttpResponseMessage httpResponse = await ExecuteApiCallWithRetry(relativeUrl, retryCount); - - AzureDevOpsArtifactInformation artifactInformation = await httpResponse.Content.ReadFromJsonAsync() - ?? throw new ArgumentException($"Couldn't parse AzDo response {httpResponse.Content} to {nameof(AzureDevOpsArtifactInformation)}"); - - return artifactInformation; - } - catch(Exception ex) - { - _logger.LogError($"Failed to get artifact download URL: {ex.Message}"); - throw; - } - } - - private async Task ExecuteApiCallWithRetry(string relativeUrl, int retryCount) - { - int retriesRemaining = retryCount; - - while (true) - { - try - { - HttpResponseMessage httpResponse = await _httpClient.GetAsync(relativeUrl, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); - - httpResponse.EnsureSuccessStatusCode(); - - return httpResponse; - } - catch (Exception ex) when (ex is HttpRequestException || ex is TaskCanceledException) - { - if (ex is HttpRequestException && ex.Message.Contains(((int)HttpStatusCode.NotFound).ToString())) - { - _logger.LogError($"Resource not found at {relativeUrl}: {ex.Message}"); - throw; - } - - if (ex is HttpRequestException && ex.Message.Contains(((int)HttpStatusCode.Unauthorized).ToString())) - { - _logger.LogError($"Failure to authenticate: {ex.Message}"); - throw; - } - - if (retriesRemaining <= 0) - { - _logger.LogError($"There was an error calling AzureDevOps API against URI '{relativeUrl}' " + - $"after {retryCount} attempts. Exception: {ex}"); - throw; - } - - _logger.LogWarning($"There was an error calling AzureDevOps API against URI against URI '{relativeUrl}'. " + - $"{retriesRemaining} attempts remaining. Exception: {ex.ToString()}"); - } - - --retriesRemaining; - await Task.Delay(5000); - } - } - - public void Dispose() - { - _httpClient.Dispose(); - } - - public record Blob(string Id, int Size); - public record ArtifactItem(string Path, Blob Blob); - public record ArtifactFiles(string ManifestFormat, ArtifactItem[] Items, string[] ManifestReferences); -} \ No newline at end of file diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs index 5490d550bf83..aa987d7d4893 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs @@ -10,7 +10,6 @@ using System.Linq; using System.Threading; using System.Xml.Linq; -using static Microsoft.DotNet.UnifiedBuild.Tasks.AzureDevOpsClient; using Task = System.Threading.Tasks.Task; namespace Microsoft.DotNet.UnifiedBuild.Tasks; @@ -23,40 +22,11 @@ public class JoinVerticals : Microsoft.Build.Utilities.Task [Required] public required ITaskItem[] VerticalManifest { get; init; } - /// - /// Name of the main vertical that we'll take all artifacts from if they exist in this vertical, and at least one other vertical. - /// - [Required] - public required string MainVertical { get; init; } - - /// - /// Azure DevOps build id - /// - [Required] - public required string BuildId { get; init; } - - /// - /// Azure DevOps token, required scopes: "Build (read)", allowed to be empty when running in a public project - /// - public string? AzureDevOpsToken { get; set; } - - /// - /// Azure DevOps organization - /// - [Required] - public required string AzureDevOpsBaseUri { get; init; } - - /// - /// Azure DevOps project - /// - [Required] - public required string AzureDevOpsProject { get; init; } - /// /// Location of downloaded artifacts from the main vertical /// [Required] - public required string MainVerticalArtifactsFolder { get; init; } + public required string VerticalArtifactsBaseFolder { get; init; } /// /// Folder where packages and assets will be stored @@ -64,39 +34,28 @@ public class JoinVerticals : Microsoft.Build.Utilities.Task [Required] public required string OutputFolder { get; init; } - - private const string _artifactNameSuffix = "_Artifacts"; private const string _assetsFolderName = "assets"; private const string _packagesFolderName = "packages"; - private const int _retryCount = 10; + private const string _releaseFolderName = "Release"; public override bool Execute() - { - ExecuteAsync().GetAwaiter().GetResult(); - return !Log.HasLoggedErrors; - } - - private async Task ExecuteAsync() { List manifests = VerticalManifest.Select(xmlPath => BuildAssetsManifest.LoadFromFile(xmlPath.ItemSpec)).ToList(); BuildAssetsManifest mainVerticalManifest = manifests - .FirstOrDefault(manifest => StringComparer.OrdinalIgnoreCase.Equals(manifest.VerticalName, MainVertical)) - ?? throw new ArgumentException($"Couldn't find main vertical manifest {MainVertical} in vertical manifest list"); - - string mainVerticalName = mainVerticalManifest.VerticalName!; + .FirstOrDefault() + ?? throw new ArgumentException($"Vertical manifest list was empty"); - JoinVerticalsAssetSelector joinVerticalsAssetSelector = new JoinVerticalsAssetSelector(); + JoinVerticalsAssetSelector joinVerticalsAssetSelector = new(); List selectedVerticals = joinVerticalsAssetSelector.SelectAssetMatchingVertical(manifests).ToList(); var notMatchedAssets = selectedVerticals.Where(o => o.MatchType == AssetVerticalMatchType.NotSpecified).ToList(); - Log.LogMessage(MessageImportance.High, $"### {notMatchedAssets.Count()} Assets not properly matched to vertical: ###"); + Log.LogMessage(MessageImportance.High, $"### {notMatchedAssets.Count} Assets not properly matched to vertical: ###"); foreach (var matchResult in notMatchedAssets) { Log.LogMessage(MessageImportance.High, $"Asset: {matchResult.AssetId} -- Matched to: {matchResult.VerticalName}, Other verticals: {string.Join(", ", matchResult.OtherVerticals)}"); } - // save manifest and download all the assets string packagesOutputDirectory = Path.Combine(OutputFolder, _packagesFolderName); ForceDirectory(packagesOutputDirectory); @@ -109,20 +68,6 @@ private async Task ExecuteAsync() string manifestOutputPath = Path.Combine(OutputFolder, "MergedManifest.xml"); mergedManifest.Save(manifestOutputPath); - (AssetVerticalMatchResult matchResult, string fileName) figureOutFileName(AssetVerticalMatchResult matchResult) - { - string fileName = matchResult.Asset.AssetType switch - { - ManifestAssetType.Package => $"{matchResult.Asset.Id}.{matchResult.Asset.Version}.nupkg", - ManifestAssetType.Blob => matchResult.Asset.Id, - _ => throw new ArgumentException($"Unknown asset type {matchResult.Asset.AssetType}") - }; - return (matchResult, fileName); - } - - using var clientThrottle = new SemaphoreSlim(16, 16); - List downloadTasks = new(); - foreach (var matchResult in selectedVerticals.GroupBy(o => o.VerticalName).OrderByDescending(g => g.Count())) { string verticalName = matchResult.Key; @@ -137,136 +82,26 @@ private async Task ExecuteAsync() .Select(figureOutFileName) .ToList(); - // copy main vertical assets from the local already downloaded artifacts - if (StringComparer.OrdinalIgnoreCase.Equals(verticalName, mainVerticalName)) - { - var targetFolderPackages = Path.Combine(MainVerticalArtifactsFolder, _packagesFolderName); - downloadTasks.Add( - CopyMainVerticalAssets(targetFolderPackages, packagesOutputDirectory, assetListPackages) - ); - var targetFolderBlobs = Path.Combine(MainVerticalArtifactsFolder, _assetsFolderName); - downloadTasks.Add( - CopyMainVerticalAssets(targetFolderBlobs, assetsOutputDirectory, assetListPackages) - ); - continue; - } - - if (assetListPackages.Count > 0) - { - downloadTasks.Add( - DownloadArtifactFiles( - BuildId, - $"{verticalName}{_artifactNameSuffix}", - assetListPackages.Select(o => o.fileName).ToList(), - packagesOutputDirectory, - clientThrottle) - ); - } - - if (assetListBlobs.Count > 0) - { - downloadTasks.Add( - DownloadArtifactFiles( - BuildId, - $"{verticalName}{_artifactNameSuffix}", - assetListBlobs.Select(o => o.fileName).ToList(), - assetsOutputDirectory, - clientThrottle) - ); - } + CopyVerticalAssets(Path.Combine(VerticalArtifactsBaseFolder, verticalName, _packagesFolderName, _releaseFolderName), packagesOutputDirectory, assetListPackages); + CopyVerticalAssets(Path.Combine(VerticalArtifactsBaseFolder, verticalName, _assetsFolderName, _releaseFolderName), assetsOutputDirectory, assetListBlobs); } + + return !Log.HasLoggedErrors; - await Task.WhenAll(downloadTasks); - } - - /// - /// Downloads specified packages and symbols from a specific build artifact and stores them in an output folder - /// - private async Task DownloadArtifactFiles( - string buildId, - string artifactName, - List fileNamesToDownload, - string outputDirectory, - SemaphoreSlim clientThrottle) - { - using AzureDevOpsClient azureDevOpsClient = new(AzureDevOpsToken, AzureDevOpsBaseUri, AzureDevOpsProject, Log); - - ArtifactFiles filesInformation = await azureDevOpsClient.GetArtifactFilesInformation(buildId, artifactName, _retryCount); - - await Task.WhenAll(fileNamesToDownload.Select(async fileName => - await DownloadFileFromArtifact( - filesInformation, - artifactName, - azureDevOpsClient, - buildId, - fileName, - outputDirectory, - clientThrottle))); - } - private async Task DownloadFileFromArtifact( - ArtifactFiles artifactFilesMetadata, - string azureDevOpsArtifact, - AzureDevOpsClient azureDevOpsClient, - string buildId, - string manifestFile, - string destinationDirectory, - SemaphoreSlim clientThrottle) - { - try + static (AssetVerticalMatchResult matchResult, string fileName) figureOutFileName(AssetVerticalMatchResult matchResult) { - await clientThrottle.WaitAsync(); - - ArtifactItem fileItem; - - var matchingFilePaths = artifactFilesMetadata.Items.Where(f => Path.GetFileName(f.Path) == Path.GetFileName(manifestFile)); - - if (!matchingFilePaths.Any()) - { - throw new ArgumentException($"File {manifestFile} not found in source files."); - } - - if (matchingFilePaths.Count() > 1) - { - // Picking the first one until https://github.com/dotnet/source-build/issues/4596 is resolved - if (manifestFile.Contains("productVersion.txt")) - { - fileItem = matchingFilePaths.First(); - } - else - { - // For some files it's not enough to compare the filename because they have 2 copies in the artifact - // e.g. assets/Release/dotnet-sdk-*-win-x64.zip and assets/Release/Sdk/*/dotnet-sdk-*-win-x64.zip - // In this case take the one matching the full path from the manifest - fileItem = matchingFilePaths - .SingleOrDefault(f => f.Path.EndsWith(manifestFile) || f.Path.EndsWith(manifestFile.Replace("/", @"\"))) - ?? throw new ArgumentException($"File {manifestFile} not found in source files."); - } - } - else + string fileName = matchResult.Asset.AssetType switch { - fileItem = matchingFilePaths.Single(); - } - - string itemId = fileItem.Blob.Id; - string artifactSubPath = fileItem.Path; - - string destinationFilePath = Path.Combine(destinationDirectory, Path.GetFileName(manifestFile)); - - await azureDevOpsClient.DownloadSingleFileFromArtifact(buildId, azureDevOpsArtifact, itemId, artifactSubPath, destinationFilePath, _retryCount); - } - catch (Exception ex) - { - Log.LogError($"Failed to download file {manifestFile} from artifact {azureDevOpsArtifact}: {ex.Message}"); - throw; - } - finally - { - clientThrottle.Release(); + ManifestAssetType.Package => $"{matchResult.Asset.Id}.{matchResult.Asset.Version}.nupkg", + ManifestAssetType.Blob => matchResult.Asset.Id, + _ => throw new ArgumentException($"Unknown asset type {matchResult.Asset.AssetType}") + }; + return (matchResult, fileName); } } - private void ForceDirectory(string directory) + private static void ForceDirectory(string directory) { if (!Directory.Exists(directory)) { @@ -275,19 +110,27 @@ private void ForceDirectory(string directory) } /// - /// Copy all files from the source directory to the destination directory in a flat layout + /// Copy assets for a vertical from the source directory to the destination directory in a flat layout /// - private async Task CopyMainVerticalAssets(string sourceDirectory, string destinationDirectory, + private void CopyVerticalAssets(string sourceDirectory, string destinationDirectory, IEnumerable<(AssetVerticalMatchResult matchResult, string fileName)> assets) { - await Task.Yield(); - - var sourceFiles = Directory.EnumerateFiles(sourceDirectory, "*", SearchOption.AllDirectories); - foreach (var sourceFile in sourceFiles) + foreach (var sourceFile in assets) { - string destinationFilePath = Path.Combine(destinationDirectory, Path.GetFileName(sourceFile)); + string destinationFilePath = Path.Combine(destinationDirectory, Path.GetFileName(sourceFile.fileName)); Log.LogMessage(MessageImportance.High, $"Copying {sourceFile} to {destinationFilePath}"); - File.Copy(sourceFile, destinationFilePath, true); + + if (sourceFile.matchResult.Asset.AssetType == ManifestAssetType.Package) + { + string shippingSubdir = sourceFile.matchResult.Asset.NonShipping + ? "NonShipping" + : "Shipping"; + File.Copy(Path.Combine(sourceDirectory, shippingSubdir, sourceFile.matchResult.Asset.RepoOrigin ?? "", sourceFile.fileName), destinationFilePath, true); + } + else + { + File.Copy(Path.Combine(sourceDirectory, sourceFile.fileName), destinationFilePath, true); + } } } } diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/BuildAssetsManifest.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/BuildAssetsManifest.cs index 802c54b50307..6643eea48968 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/BuildAssetsManifest.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/BuildAssetsManifest.cs @@ -147,7 +147,7 @@ public string? Version /// public bool NonShipping { - get { return GetAttribute(nameof(NonShipping)) == bool.TrueString; } + get { return GetAttribute(nameof(NonShipping))?.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase) ?? false; } set { SetAttribute(nameof(NonShipping), value.ToString(CultureInfo.InvariantCulture)); } } @@ -156,7 +156,7 @@ public bool NonShipping /// public bool DotNetReleaseShipping { - get { return GetAttribute(nameof(DotNetReleaseShipping)) == bool.TrueString; } + get { return GetAttribute(nameof(DotNetReleaseShipping))?.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase) ?? false; } set { SetAttribute(nameof(DotNetReleaseShipping), value.ToString(CultureInfo.InvariantCulture)); } } diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs index 103021dd0e32..f0458269285e 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs @@ -13,7 +13,6 @@ namespace Microsoft.DotNet.UnifiedBuild.Tasks.ManifestAssets public enum AssetVerticalMatchType { ExactMatch, - PriorityVerticals, NotSpecified } @@ -30,13 +29,6 @@ public class JoinVerticalsAssetSelector { private const string cAssetVisibilityExternal = "External"; - private JoinVerticalsConfig _config; - - public JoinVerticalsAssetSelector(JoinVerticalsConfig? config = null) - { - _config = config ?? JoinVerticalsConfig.GetDefaultConfig(); - } - // Temporary solution to exclude some assets from Unified Build private bool ExcludeAsset(AssetVerticalMatchResult assetVerticalMatch) { @@ -85,8 +77,8 @@ bool IsExternalAsset(ManifestAsset asset) AssetId = assetGroup.Key, MatchType = matchType, VerticalName = verticalName, - Asset = assetGroup.FirstOrDefault(o => VerticalNameMatches(o.manifest.VerticalName, verticalName)).asset, - OtherVerticals = assetGroup.Select(o => o.manifest.VerticalName!).Where(o => !VerticalNameMatches(o, verticalName)).ToList() + Asset = assetGroup.FirstOrDefault().asset, + OtherVerticals = assetGroup.Select(o => o.manifest.VerticalName!).Skip(1).ToList() }; if (!ExcludeAsset(assetVerticalMatch)) @@ -105,12 +97,6 @@ bool IsExternalAsset(ManifestAsset asset) return (AssetVerticalMatchType.ExactMatch, verticalNames.Single()); } - // Apply general priority ordered list of primary verticals - if (verticalNames.Contains(_config.PriorityVertical, StringComparer.OrdinalIgnoreCase)) - { - return (AssetVerticalMatchType.PriorityVerticals, _config.PriorityVertical); - } - // Select first vertical from the list and report it as ambiguous match return (AssetVerticalMatchType.NotSpecified, verticalNames.First()); } diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsConfig.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsConfig.cs deleted file mode 100644 index 4dcfb6861489..000000000000 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsConfig.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#nullable enable - -using System.Collections.Generic; - -namespace Microsoft.DotNet.UnifiedBuild.Tasks.ManifestAssets -{ - public class JoinVerticalsConfig - { - public required string PriorityVertical { get; init; } - - public static JoinVerticalsConfig GetDefaultConfig() - { - JoinVerticalsConfig joinVerticalsConfig = new JoinVerticalsConfig - { - PriorityVertical = "Windows_x64" - }; - return joinVerticalsConfig; - } - } -} diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/Models/AzureDevOpsArtifactInformation.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/Models/AzureDevOpsArtifactInformation.cs deleted file mode 100644 index 42341d78194d..000000000000 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/Models/AzureDevOpsArtifactInformation.cs +++ /dev/null @@ -1,9 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -namespace Microsoft.DotNet.UnifiedBuild.Tasks; - -public record AzureDevOpsArtifactInformation(int Id, string Name, string Source, AzdoArtifactResources Resource); -public record AzdoArtifactResources(string Type, string Data, AzdoArtifactProperties Properties, string Url, string DownloadUrl); -public record AzdoArtifactProperties(string RootId, string Artifactsize, string HashType, string DomainId); \ No newline at end of file diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.props b/src/SourceBuild/content/repo-projects/Directory.Build.props index d58e9a6777ef..d97f65cf2c05 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.props +++ b/src/SourceBuild/content/repo-projects/Directory.Build.props @@ -59,6 +59,19 @@ $([MSBuild]::NormalizeDirectory('$(ArtifactsLogDir)', '$(RepositoryName)')) $([MSBuild]::NormalizeDirectory('$(PackageReportDir)', '$(RepositoryName)')) + + Windows_x64 + + + false + true diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.targets b/src/SourceBuild/content/repo-projects/Directory.Build.targets index 664c9ff89337..a9bffefdfacb 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.targets +++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets @@ -470,6 +470,8 @@ ProcessFrameworkReferences not be able to restore for the given RID. --> $(BuildArgs) /p:DotNetBuildTargetRidOnly=true + $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts) + $(BuildScript) $(BuildActions) $(CommonArgs) $(BuildArgs) diff --git a/src/SourceBuild/content/repo-projects/arcade.proj b/src/SourceBuild/content/repo-projects/arcade.proj index ac63070a2123..2355e25273b2 100644 --- a/src/SourceBuild/content/repo-projects/arcade.proj +++ b/src/SourceBuild/content/repo-projects/arcade.proj @@ -3,6 +3,13 @@ true + + $(BuildArgs) /p:DefaultArtifactVisibility=Internal + false diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVertialsTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs similarity index 100% rename from src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVertialsTests.cs rename to src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm.xml index 2efdbd7a1b54..39708206df7d 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm64.xml index 05da99cdd0d5..1af9f3face8d 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_arm64.xml @@ -1,10 +1,88 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x64.xml index 02109574620a..23fade63128e 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x64.xml @@ -1,8 +1,86 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x86.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x86.xml index 48d559b7ccb2..891d562fcc74 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x86.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Android_Shortstack_x86.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm.xml index 51194dd5427f..446c379827a6 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm.xml @@ -1,1060 +1,166 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm64.xml index a16e633d8e7b..b33101ab8526 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_arm64.xml @@ -1,1072 +1,178 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_x64.xml index c56438d04e97..283efa7f7e6a 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Alpine_x64.xml @@ -1,1074 +1,180 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_arm64.xml index 93d1eb99d29c..3a82f597ab82 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_arm64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_x64.xml index a846712dfe14..e6f6d2c45db2 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_Pgo_x64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_arm64.xml index c0b80c8aea75..728c24eb6c12 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_arm64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_x64.xml index 2b2b9c945c33..90b480c20fb7 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT_x64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm.xml index 5c94f390bcc6..7d61e014b24f 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm.xml @@ -1,1096 +1,188 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm64.xml index c8bad0311451..739d2deaa716 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_arm64.xml @@ -1,1128 +1,236 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_x64.xml index c84b06be730f..9df46ce14ad4 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/AzureLinux_x64_Cross_x64.xml @@ -1,1144 +1,236 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Multithreaded_Shortstack_wasm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Multithreaded_Shortstack_wasm.xml index 5359a77f25ad..e2b2fe5fa01d 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Multithreaded_Shortstack_wasm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Multithreaded_Shortstack_wasm.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Shortstack_wasm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Shortstack_wasm.xml index b257a17c5643..fd0470eff888 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Shortstack_wasm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Browser_Shortstack_wasm.xml @@ -1,26 +1,104 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm.xml index 362c704929ea..cac0e762dd6c 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm.xml @@ -1,226 +1,82 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm64.xml index 7f5037845eb1..7c873637d02b 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_arm64.xml @@ -1,244 +1,98 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_x64.xml index e4e10bc0ee1d..e5d5311e1d54 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/LinuxBionic_Shortstack_x64.xml @@ -1,244 +1,98 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_arm64.xml index 4bd3b49aa02f..2ccc55c13b09 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_arm64.xml @@ -1,8 +1,86 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_x64.xml index 54d1d65c124d..99bb5fff26b8 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/MacCatalyst_Shortstack_x64.xml @@ -1,8 +1,86 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_Shortstack_Mono_LLVMAOT_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_Shortstack_Mono_LLVMAOT_x64.xml index 09628aea8797..ba69967004b8 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_Shortstack_Mono_LLVMAOT_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_Shortstack_Mono_LLVMAOT_x64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_arm64.xml index f1b4804b9c46..73db9d5398c8 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_arm64.xml @@ -1,1106 +1,212 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_x64.xml index f278d918a078..834d9a295ab3 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/OSX_x64.xml @@ -1,1106 +1,212 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Wasi_Shortstack_wasm.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Wasi_Shortstack_wasm.xml index 1f68212db407..fdbbedf51e31 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Wasi_Shortstack_wasm.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Wasi_Shortstack_wasm.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_arm64.xml index ffab7c74e457..a617832561b1 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_arm64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x64.xml index ef0d4bd380b5..950784c13377 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x64.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x86.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x86.xml index 70ca742ba670..d92da563e57a 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x86.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_Pgo_x86.xml @@ -1,4 +1,82 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_arm64.xml index 1e3d7e7d3c95..ba70fc451d41 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_arm64.xml @@ -1,1206 +1,246 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64.xml index a8b144d83426..02375eb78269 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64.xml @@ -1,1224 +1,1228 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64_BuildPass2.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64_BuildPass2.xml index 523023e942cd..9ff5e1207815 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64_BuildPass2.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x64_BuildPass2.xml @@ -1,20 +1,19 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86.xml index 86f7afdb29da..de162ba5b0ec 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86.xml @@ -1,1196 +1,236 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86_BuildPass2.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86_BuildPass2.xml index 86b2debf0860..2e447dd2f750 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86_BuildPass2.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/Windows_x86_BuildPass2.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_arm64.xml index e4ba9d57df2f..979902a781d0 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_arm64.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_x64.xml index a811eeb19feb..3adcef1629cf 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOSSimulator_Shortstack_x64.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOS_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOS_Shortstack_arm64.xml index 627cfe2786a1..e0fb422fb1b3 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOS_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/iOS_Shortstack_arm64.xml @@ -1,14 +1,92 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_arm64.xml index 11d83e5d6014..05401ceaf007 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_arm64.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_x64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_x64.xml index 5c089366f127..2674452860f1 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_x64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOSSimulator_Shortstack_x64.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOS_Shortstack_arm64.xml b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOS_Shortstack_arm64.xml index 138c27aa20c9..f34e1efa8532 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOS_Shortstack_arm64.xml +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/assets/JoinVerticalsTests/manifests/verticals/tvOS_Shortstack_arm64.xml @@ -1,6 +1,84 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch b/src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch new file mode 100644 index 000000000000..5d50061fa92e --- /dev/null +++ b/src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jeremy Koritzinsky +Date: Tue, 21 Jan 2025 15:22:19 -0800 +Subject: Deduplicate artifacts in VMR builds + +Backport: https://github.com/dotnet/aspnetcore/pull/60792 +--- +diff --git a/eng/Publishing.props b/eng/Publishing.props +index a6a89bd0e9..f95274dc56 100644 +--- a/eng/Publishing.props ++++ b/eng/Publishing.props +@@ -12,10 +12,17 @@ + '$(PostBuildSign)' != 'true' and + '$(DotNetBuildRepo)' != 'true'">false + +- true + + false ++ ++ true ++ $(PublishAllBuildsAssetsInThisJob) + + + +@@ -24,10 +31,10 @@ + + + +- <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.jar" UploadPathSegment="jar" /> +- <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.pom" UploadPathSegment="jar" /> ++ <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.jar" UploadPathSegment="jar" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> ++ <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.pom" UploadPathSegment="jar" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> + +- <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.tgz" UploadPathSegment="npm" Condition="'$(OS)' == 'Windows_NT' or '$(DotNetBuildOrchestrator)' == 'true'" /> ++ <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.tgz" UploadPathSegment="npm" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> + <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.version" UploadPathSegment="Runtime" Condition="'$(PublishInstallerBaseVersion)' == 'true'" /> + + diff --git a/src/SourceBuild/patches/runtime/0001-use-standard-arcade-publish.patch b/src/SourceBuild/patches/runtime/0001-use-standard-arcade-publish.patch index f1a0ad39bc7e..e8fde135feb9 100644 --- a/src/SourceBuild/patches/runtime/0001-use-standard-arcade-publish.patch +++ b/src/SourceBuild/patches/runtime/0001-use-standard-arcade-publish.patch @@ -1453,3 +1453,144 @@ index 03c4308e13aebf..e581348a11eb80 100644 + name: $(DncEngInternalBuildPool) + demands: ImageOverride -equals 1es-windows-2022 + symbolPublishingAdditionalParameters: '/p:PublishSpecialClrFiles=true' +diff --git a/eng/DotNetBuild.props b/eng/DotNetBuild.props +index 4b64cec303..1631f76ce9 100644 +--- a/eng/DotNetBuild.props ++++ b/eng/DotNetBuild.props +@@ -38,6 +38,19 @@ + true + + ++ ++ ++ ++ false ++ ++ true ++ ++ false ++ ++ + + +@@ -108,13 +121,7 @@ + + $(InnerBuildArgs) /p:NetCoreAppToolCurrentVersion=$(NetCoreAppToolCurrentVersion) + +- +- $(InnerBuildArgs) /p:EnableDefaultArtifacts=false ++ $(InnerBuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts) + + + +diff --git a/eng/Publishing.props b/eng/Publishing.props +index a68e020582..816eac1b87 100644 +--- a/eng/Publishing.props ++++ b/eng/Publishing.props +@@ -10,7 +10,7 @@ + We can't use NETCoreSdkRuntimeIdentifier here as the Arcade SDK projects don't import the .NET SDK. + Instead, just make sure we include the assets targeting "not the output rid", which will catch the host assets. + --> +- ++ + <_HostArtifact Include="$(ArtifactsPackagesDir)**\runtime.*.Microsoft.NETCore.ILAsm.*.nupkg" + Exclude="$(ArtifactsPackagesDir)**\runtime.$(OutputRID).Microsoft.NETCore.ILAsm.*.nupkg" /> + +diff --git a/eng/Signing.props b/eng/Signing.props +index a5b0869b43..b9ee32e152 100644 +--- a/eng/Signing.props ++++ b/eng/Signing.props +@@ -4,22 +4,29 @@ + + + +- false ++ false + true + false + ++ ++ $(PackageRID) ++ ++ true ++ + true + + +@@ -70,7 +77,6 @@ + + + +- + + + + +- +- +- +- +- ++ + + + +- +- +- + + +- + + +- +- + + + diff --git a/src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch b/src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch new file mode 100644 index 000000000000..815dab365b30 --- /dev/null +++ b/src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jeremy Koritzinsky +Date: Tue, 21 Jan 2025 15:22:19 -0800 +Subject: Deduplicate artifacts in VMR builds + +Backport: https://github.com/dotnet/windowsdesktop/pull/4960 +--- +diff --git a/eng/Publishing.props b/eng/Publishing.props +index 8f1e1fb81c..a64b2808c4 100644 +--- a/eng/Publishing.props ++++ b/eng/Publishing.props +@@ -8,6 +8,21 @@ + $(TargetArchitecture) + + ++ ++ ++ true ++ true ++ ++ ++ ++ true ++ ++ + + +@@ -22,7 +37,7 @@ + ++ Condition="'$(ShouldGenerateProductVersionFiles)' == 'true'"> + + From 7dcb8822f681c020673d891decca4a6529019da5 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 6 Mar 2025 17:00:53 -0800 Subject: [PATCH 02/23] Restore disabled IBC (disabled due to MSBuild failures) --- eng/pipelines/templates/variables/vmr-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/variables/vmr-build.yml b/eng/pipelines/templates/variables/vmr-build.yml index c7c8dc3ae49e..1a68a230fa3f 100644 --- a/eng/pipelines/templates/variables/vmr-build.yml +++ b/eng/pipelines/templates/variables/vmr-build.yml @@ -29,7 +29,7 @@ variables: ## Note: The use of if expressons underneath the variable is necessary to get the updated isOfficialBuild value - name: ibcEnabled ${{ if eq(variables['isOfficialBuild'], true) }}: - value: false + value: true ${{ else }}: value: false From 7e42c98487467c930184ea7d8ac5044c15089fdb Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 6 Mar 2025 17:14:44 -0800 Subject: [PATCH 03/23] Forward isSourceOnlyBuild down --- eng/pipelines/templates/stages/vmr-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml index bdf8fe24b33c..a7c41ebb1a6a 100644 --- a/eng/pipelines/templates/stages/vmr-build.yml +++ b/eng/pipelines/templates/stages/vmr-build.yml @@ -84,6 +84,7 @@ stages: desiredSigning: ${{ parameters.desiredSigning }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} scope: ${{ parameters.scope }} + isSourceOnlyBuild: ${{ parameters.isSourceOnlyBuild }} finalJoinCondition: ${{ and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }} postJoinStages: - stage: Publish_Build_Assets From 2df41a5fcf2b0cdf1647f5cebc201d78f6a2b980 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 7 Mar 2025 11:02:26 -0800 Subject: [PATCH 04/23] Change our handling of EnableDefaultRidSpecificArtifacts and DefaultArtifactVisibility. Remove unused yaml logic and add more comments --- eng/Publishing.props | 4 ++++ .../templates/stages/vmr-build-with-join.yml | 11 +++++++++-- eng/pipelines/templates/steps/vmr-join-verticals.yml | 4 ---- .../content/repo-projects/Directory.Build.props | 5 ++--- .../content/repo-projects/Directory.Build.targets | 5 +++-- src/SourceBuild/content/repo-projects/arcade.proj | 5 +++-- src/SourceBuild/content/repo-projects/runtime.proj | 3 +++ 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/eng/Publishing.props b/eng/Publishing.props index 264f01ebe787..6f01221e8356 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -15,6 +15,10 @@ Shipping Release + Vertical External diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index 47bbd24c534f..851a7019cb2d 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -1,9 +1,12 @@ parameters: +# Stages that build individual verticals - name: verticalsStages type: stageList +# Stages that need to run after the final artifacts are determined after joining all verticals. - name: postJoinStages type: stageList default: [] +# When we should run the final join stage and the stages that depend on it. - name: finalJoinCondition type: boolean # These are not expected to be passed it but rather just object variables reused below @@ -49,9 +52,12 @@ parameters: os: linux stages: +# Insert all stages that build verticals +# and publish artifacts for each vertical - ${{ each vertical in parameters.verticalsStages }}: - ${{ insert }}: ${{ vertical }} - ${{ if parameters.finalJoinCondition }}: + # This stage should contain all jobs that take inputs from all verticals and determine the exact final outputs. - stage: VMR_Final_Join displayName: 'VMR Final Join' dependsOn: ${{ parameters.verticalsStages.*.stage }} @@ -63,6 +69,7 @@ stages: templateContext: outputParentDirectory: $(Build.ArtifactStagingDirectory)/artifacts inputs: + # Download the artifacts from every job in every vertical stage under VerticalArtifacts - ${{ each vertical in parameters.verticalsStages.*.jobs.*.job }}: - input: pipelineArtifact path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical }} @@ -97,14 +104,14 @@ stages: parameters: dotNetBuildPass: final outputFolder: $(Build.ArtifactStagingDirectory)/artifacts - # Insert all of the validation stages, - # adding a dependency on the final join stage + # Insert all of the post-join stages. - ${{ each postJoinStage in parameters.postJoinStages }}: - stage: ${{ postJoinStage.stage }} ${{ each pair in postJoinStage }}: ${{ if notIn(pair.key, 'dependsOn', 'stage') }}: ${{ pair.key }}: ${{ pair.value }} dependsOn: + # Inject a dependency on the final join stage - VMR_Final_Join # add any dependencies provided via root yaml - ${{ if ne(postJoinStage.dependsOn, '') }}: diff --git a/eng/pipelines/templates/steps/vmr-join-verticals.yml b/eng/pipelines/templates/steps/vmr-join-verticals.yml index 6d249d47a61a..a3f619882827 100644 --- a/eng/pipelines/templates/steps/vmr-join-verticals.yml +++ b/eng/pipelines/templates/steps/vmr-join-verticals.yml @@ -3,10 +3,6 @@ parameters: type: string default: final -- name: verticals - type: object - default: [] - - name: outputFolder type: string default: $(Build.ArtifactStagingDirectory)/artifacts diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.props b/src/SourceBuild/content/repo-projects/Directory.Build.props index d97f65cf2c05..0d5c5b4e0c3b 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.props +++ b/src/SourceBuild/content/repo-projects/Directory.Build.props @@ -67,7 +67,6 @@ - This is not the Rid-agnostic vertical - This is a BuildPass1 build --> - false - $(CommonArgs) /p:DefaultArtifactVisibility=Vertical + Vertical - $(CommonArgs) /p:DefaultArtifactVisibility=Vertical + Vertical diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.targets b/src/SourceBuild/content/repo-projects/Directory.Build.targets index a9bffefdfacb..65ae20b7bf77 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.targets +++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets @@ -38,9 +38,12 @@ $(CommonArgs) /p:PortableBuild=$(PortableBuild) $(CommonArgs) /p:RuntimeOS=$(RuntimeOS) $(CommonArgs) /p:BaseOS=$(BaseOS) + $(CommonArgs) /p:DefaultArtifactVisibility=$(DefaultArtifactVisibility) $(CommonArgs) /p:DotNetBuildTests=true + + $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts) @@ -470,8 +473,6 @@ ProcessFrameworkReferences not be able to restore for the given RID. --> $(BuildArgs) /p:DotNetBuildTargetRidOnly=true - $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts) - $(BuildScript) $(BuildActions) $(CommonArgs) $(BuildArgs) diff --git a/src/SourceBuild/content/repo-projects/arcade.proj b/src/SourceBuild/content/repo-projects/arcade.proj index 2355e25273b2..b1710c79d341 100644 --- a/src/SourceBuild/content/repo-projects/arcade.proj +++ b/src/SourceBuild/content/repo-projects/arcade.proj @@ -8,8 +8,9 @@ set all of Arcade's packages to be internal visibility when we would do RID-specific publishing and disable RID-specific publishing. --> - $(BuildArgs) /p:DefaultArtifactVisibility=Internal - false + Internal + + diff --git a/src/SourceBuild/content/repo-projects/runtime.proj b/src/SourceBuild/content/repo-projects/runtime.proj index 458c064b9614..70ef96bb813b 100644 --- a/src/SourceBuild/content/repo-projects/runtime.proj +++ b/src/SourceBuild/content/repo-projects/runtime.proj @@ -37,6 +37,9 @@ true + + + false From 1cfe7d2b453e8e54b3ebfc8367e2495afa62e0ce Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 7 Mar 2025 11:03:28 -0800 Subject: [PATCH 05/23] Remove dead code --- .../JoinVerticalsTests.cs | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs index 2785ebb7cef1..50baa6399135 100644 --- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs +++ b/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs @@ -138,42 +138,6 @@ private void PrintTestSelectionResult(IReadOnlyCollection o.MatchType == AssetVerticalMatchType.PriorityVerticals) - .GroupBy(o => o.VerticalName) - .OrderByDescending(o => o.Count()) - .ToList(); - if (ambiguousAssetsByVertical.Any()) - { - foreach (var verticalAssets in ambiguousAssetsByVertical) - { - if (StringComparer.OrdinalIgnoreCase.Equals(verticalAssets.Key, "Windows_x64")) - { - continue; - } - - OutputHelper.WriteLine(string.Empty); - OutputHelper.WriteLine($"Ambiguous assets stats for vertical: {verticalAssets.Key}"); - var otherVerticalGroups = verticalAssets - .SelectMany(a => a.OtherVerticals) - .GroupBy(v => v) - .Select(g => new { Vertical = g.Key, Count = g.Count() }) - .OrderByDescending(x => x.Count); - - foreach (var group in otherVerticalGroups) - { - OutputHelper.WriteLine($" - {group.Vertical}: {group.Count}"); - } - OutputHelper.WriteLine($"Ambiguous assets:"); - foreach (var assetSelectionInfo in verticalAssets) - { - OutputHelper.WriteLine($"{assetSelectionInfo.AssetId}"); - } - } - } } #endregion From 1f64d960a9739f5cee5338d41a54cc0f11e33852 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 7 Mar 2025 11:12:25 -0800 Subject: [PATCH 06/23] Allow an empty sign list for repos that don't have RID-specific artifacts --- src/SourceBuild/content/repo-projects/Directory.Build.targets | 2 ++ src/SourceBuild/content/repo-projects/aspnetcore.proj | 2 ++ src/SourceBuild/content/repo-projects/roslyn.proj | 2 ++ src/SourceBuild/content/repo-projects/runtime.proj | 1 + src/SourceBuild/content/repo-projects/sdk.proj | 2 ++ src/SourceBuild/content/repo-projects/windowsdesktop.proj | 2 ++ 6 files changed, 11 insertions(+) diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.targets b/src/SourceBuild/content/repo-projects/Directory.Build.targets index 65ae20b7bf77..3094a039c6f2 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.targets +++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets @@ -44,6 +44,8 @@ $(CommonArgs) /p:DotNetBuildTests=true $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts) + + $(BuildArgs) /p:AllowEmptySignList=true diff --git a/src/SourceBuild/content/repo-projects/aspnetcore.proj b/src/SourceBuild/content/repo-projects/aspnetcore.proj index 39d9c72c27b2..2329b0ceb6a6 100644 --- a/src/SourceBuild/content/repo-projects/aspnetcore.proj +++ b/src/SourceBuild/content/repo-projects/aspnetcore.proj @@ -33,6 +33,8 @@ true + + true diff --git a/src/SourceBuild/content/repo-projects/roslyn.proj b/src/SourceBuild/content/repo-projects/roslyn.proj index 786e486b5bba..f2bbbf768c23 100644 --- a/src/SourceBuild/content/repo-projects/roslyn.proj +++ b/src/SourceBuild/content/repo-projects/roslyn.proj @@ -11,6 +11,8 @@ $(ProjectDirectory)build$(ShellExtension) + + true diff --git a/src/SourceBuild/content/repo-projects/runtime.proj b/src/SourceBuild/content/repo-projects/runtime.proj index 70ef96bb813b..4b5620e55276 100644 --- a/src/SourceBuild/content/repo-projects/runtime.proj +++ b/src/SourceBuild/content/repo-projects/runtime.proj @@ -40,6 +40,7 @@ false + true diff --git a/src/SourceBuild/content/repo-projects/sdk.proj b/src/SourceBuild/content/repo-projects/sdk.proj index fa38b1d60404..2415e00d379b 100644 --- a/src/SourceBuild/content/repo-projects/sdk.proj +++ b/src/SourceBuild/content/repo-projects/sdk.proj @@ -39,6 +39,8 @@ $(BuildArgs) /p:PgoInstrument=true $(BuildArgs) /p:DISABLE_CROSSGEN=true + + true diff --git a/src/SourceBuild/content/repo-projects/windowsdesktop.proj b/src/SourceBuild/content/repo-projects/windowsdesktop.proj index 411025935413..f5497650fbdb 100644 --- a/src/SourceBuild/content/repo-projects/windowsdesktop.proj +++ b/src/SourceBuild/content/repo-projects/windowsdesktop.proj @@ -7,6 +7,8 @@ $(BuildArgs) $(FlagParameterPrefix)warnAsError $(ArcadeFalseBoolBuildArg) $(BuildArgs) /p:TargetArchitecture=$(TargetArchitecture) + + true From ece002c41d80029036ba7ca1d7b6798af8d06470 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 7 Mar 2025 11:23:56 -0800 Subject: [PATCH 07/23] Add backport for nuget change --- ...0001-support-rid-agnostic-publishing.patch | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch diff --git a/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch b/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch new file mode 100644 index 000000000000..988deb7a270d --- /dev/null +++ b/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch @@ -0,0 +1,27 @@ +From 31a4ea0785c8e98a2808ebf55928f67bf8f43079 Mon Sep 17 00:00:00 2001 +From: Jeremy Koritzinsky +Date: Fri, 7 Mar 2025 11:22:09 -0800 +Subject: [PATCH] Don't publish RID-agnostic nuget packages when we only want + RID-specific artifacts + +This is necessary to enable us to deduplicate assets in the VMR. + +Backport: https://github.com/NuGet/NuGet.Client/pull/6306 +--- + eng/Publishing.props | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/eng/Publishing.props b/eng/Publishing.props +index 5fe1ceb1a79..664c36c89c4 100644 +--- a/eng/Publishing.props ++++ b/eng/Publishing.props +@@ -2,7 +2,8 @@ + + + ++ PublishFlatContainer="false" ++ Condition="'$(EnableDefaultRidSpecificArtifacts)' != 'true'" /> + + + From 61048cc343513cf14230f82b3fd3af1b885f6634 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 7 Mar 2025 22:14:12 -0800 Subject: [PATCH 08/23] Update 0001-support-rid-agnostic-publishing.patch --- .../0001-support-rid-agnostic-publishing.patch | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch b/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch index 988deb7a270d..5ffd618ee5f1 100644 --- a/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch +++ b/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch @@ -15,13 +15,17 @@ diff --git a/eng/Publishing.props b/eng/Publishing.props index 5fe1ceb1a79..664c36c89c4 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props -@@ -2,7 +2,8 @@ +@@ -2,7 +2,12 @@ + PublishFlatContainer="false" + Condition="'$(EnableDefaultRidSpecificArtifacts)' != 'true'" /> - ++ + From bbf24bff306d12104554375f50207c6382b64201 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 11 Mar 2025 07:37:04 -0700 Subject: [PATCH 09/23] Update Publishing.props Co-authored-by: Viktor Hofer --- eng/Publishing.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Publishing.props b/eng/Publishing.props index 6f01221e8356..a3c737e58ec5 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -17,7 +17,7 @@ Release Vertical External From 70c62d5be94edca3e85c2a838b6e583b618984d8 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 13 Mar 2025 14:01:01 -0700 Subject: [PATCH 10/23] Join in non-source-only even in PR. --- .../templates/stages/vmr-build-with-join.yml | 19 ++-- eng/pipelines/templates/stages/vmr-build.yml | 107 +++++++++--------- .../templates/stages/vmr-verticals.yml | 2 + 3 files changed, 68 insertions(+), 60 deletions(-) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index 851a7019cb2d..ef3b77887782 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -54,13 +54,16 @@ parameters: stages: # Insert all stages that build verticals # and publish artifacts for each vertical -- ${{ each vertical in parameters.verticalsStages }}: - - ${{ insert }}: ${{ vertical }} +- ${{ each stage in parameters.verticalsStages }}: + - ${{ insert }}: ${{ stage }} - ${{ if parameters.finalJoinCondition }}: # This stage should contain all jobs that take inputs from all verticals and determine the exact final outputs. - stage: VMR_Final_Join displayName: 'VMR Final Join' - dependsOn: ${{ parameters.verticalsStages.*.stage }} + dependsOn: + - ${{ each stage in parameters.verticalsStages }}: + - ${{ if ne(stage.templateContext.validationOnly, 'true') }}: + - ${{ stage.stage }} jobs: - job: FinalJoin displayName: Final Build Pass @@ -70,10 +73,12 @@ stages: outputParentDirectory: $(Build.ArtifactStagingDirectory)/artifacts inputs: # Download the artifacts from every job in every vertical stage under VerticalArtifacts - - ${{ each vertical in parameters.verticalsStages.*.jobs.*.job }}: - - input: pipelineArtifact - path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical }} - artifactName: ${{ vertical }}_Artifacts + - ${{ each stage in parameters.verticalsStages }}: + - ${{ if ne(stage.templateContext.validationOnly, 'true') }}: + - ${{ each vertical in stage.jobs.*.job }}: + - input: pipelineArtifact + path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical.job }} + artifactName: ${{ vertical.job }}_Artifacts - input: pipelineArtifact path: $(Build.ArtifactStagingDirectory)/VerticalManifests artifactName: VerticalManifests diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml index d62e30ac6f13..67d57c8a9fce 100644 --- a/eng/pipelines/templates/stages/vmr-build.yml +++ b/eng/pipelines/templates/stages/vmr-build.yml @@ -85,65 +85,66 @@ stages: isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} scope: ${{ parameters.scope }} isSourceOnlyBuild: ${{ parameters.isSourceOnlyBuild }} - finalJoinCondition: ${{ and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }} + finalJoinCondition: ${{ and(not(parameters.isSourceOnlyBuild), eq(parameters.scope, 'full')) }} postJoinStages: - - stage: Publish_Build_Assets - displayName: Publish Assets - jobs: - - template: /eng/common/templates-official/job/publish-build-assets.yml@self - parameters: - publishUsingPipelines: true - publishAssetsImmediately: true - pool: ${{ parameters.pool_Linux }} + - ${{ if and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: + - stage: Publish_Build_Assets + displayName: Publish Assets + jobs: + - template: /eng/common/templates-official/job/publish-build-assets.yml@self + parameters: + publishUsingPipelines: true + publishAssetsImmediately: true + pool: ${{ parameters.pool_Linux }} - - stage: VMR_Validation - displayName: VMR Validation - variables: - - template: ../variables/vmr-build.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} - desiredSigning: ${{ parameters.desiredSigning }} - - group: Release-Pipeline - - group: DotNetBot-GitHub-AllBranches - jobs: - - job: ValidateAssetBaselines - displayName: Validate Asset Baselines - pool: ${{ parameters.pool_Windows }} - timeoutInMinutes: 180 - steps: - - template: ../steps/vmr-validate-asset-baseline.yml + - stage: VMR_Validation + displayName: VMR Validation + variables: + - template: ../variables/vmr-build.yml parameters: - continueOnError: true - - ${{ if eq(variables.signEnabled, 'true') }}: - - job: ValidateSigning_Windows - displayName: Validate Signing - Windows + vmrBranch: ${{ parameters.vmrBranch }} + desiredSigning: ${{ parameters.desiredSigning }} + - group: Release-Pipeline + - group: DotNetBot-GitHub-AllBranches + jobs: + - job: ValidateAssetBaselines + displayName: Validate Asset Baselines pool: ${{ parameters.pool_Windows }} - timeoutInMinutes: 240 + timeoutInMinutes: 180 steps: - - template: ../steps/vmr-validate-signing.yml + - template: ../steps/vmr-validate-asset-baseline.yml parameters: - artifactName: PackageArtifacts continueOnError: true - OS: Windows_NT + - ${{ if eq(variables.signEnabled, 'true') }}: + - job: ValidateSigning_Windows + displayName: Validate Signing - Windows + pool: ${{ parameters.pool_Windows }} + timeoutInMinutes: 240 + steps: + - template: ../steps/vmr-validate-signing.yml + parameters: + artifactName: PackageArtifacts + continueOnError: true + OS: Windows_NT - - job: ValidateSigning_Mac - displayName: Validate Signing - Mac - pool: ${{ parameters.pool_Mac }} - timeoutInMinutes: 240 - steps: - - template: ../steps/vmr-validate-signing.yml - parameters: - artifactName: BlobArtifacts - continueOnError: true - OS: Darwin + - job: ValidateSigning_Mac + displayName: Validate Signing - Mac + pool: ${{ parameters.pool_Mac }} + timeoutInMinutes: 240 + steps: + - template: ../steps/vmr-validate-signing.yml + parameters: + artifactName: BlobArtifacts + continueOnError: true + OS: Darwin - - job: ValidateSigning_Linux - displayName: Validate Signing - Linux - pool: ${{ parameters.pool_Linux }} - timeoutInMinutes: 240 - steps: - - template: ../steps/vmr-validate-signing.yml - parameters: - artifactName: BlobArtifacts - continueOnError: true - OS: Linux + - job: ValidateSigning_Linux + displayName: Validate Signing - Linux + pool: ${{ parameters.pool_Linux }} + timeoutInMinutes: 240 + steps: + - template: ../steps/vmr-validate-signing.yml + parameters: + artifactName: BlobArtifacts + continueOnError: true + OS: Linux diff --git a/eng/pipelines/templates/stages/vmr-verticals.yml b/eng/pipelines/templates/stages/vmr-verticals.yml index 99ac535aff11..c62cdff4402b 100644 --- a/eng/pipelines/templates/stages/vmr-verticals.yml +++ b/eng/pipelines/templates/stages/vmr-verticals.yml @@ -355,6 +355,8 @@ stages: - ${{ if and(not(parameters.isSourceOnlyBuild), or(eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.TeamProject'], 'internal'))) }}: - stage: VMR_Vertical_Build_Validation displayName: VMR Vertical Build Validation + templateContext: + validationOnly: true dependsOn: [] variables: - template: ../variables/vmr-build.yml From 7febe6cc8d2a0f016a3dc990a9a4914032d73330 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 13 Mar 2025 15:14:32 -0700 Subject: [PATCH 11/23] Cleanup patches --- .../0001-deduplicate-artifacts-in-vmr.patch | 45 ------------------- ...0001-support-rid-agnostic-publishing.patch | 4 +- .../0001-deduplicate-artifacts-in-vmr.patch | 42 ----------------- 3 files changed, 2 insertions(+), 89 deletions(-) delete mode 100644 src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch rename src/SourceBuild/{ => patches}/nuget-client/0001-support-rid-agnostic-publishing.patch (99%) delete mode 100644 src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch diff --git a/src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch b/src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch deleted file mode 100644 index 5d50061fa92e..000000000000 --- a/src/SourceBuild/patches/aspnetcore/0001-deduplicate-artifacts-in-vmr.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jeremy Koritzinsky -Date: Tue, 21 Jan 2025 15:22:19 -0800 -Subject: Deduplicate artifacts in VMR builds - -Backport: https://github.com/dotnet/aspnetcore/pull/60792 ---- -diff --git a/eng/Publishing.props b/eng/Publishing.props -index a6a89bd0e9..f95274dc56 100644 ---- a/eng/Publishing.props -+++ b/eng/Publishing.props -@@ -12,10 +12,17 @@ - '$(PostBuildSign)' != 'true' and - '$(DotNetBuildRepo)' != 'true'">false - -- true - - false -+ -+ true -+ $(PublishAllBuildsAssetsInThisJob) - - - -@@ -24,10 +31,10 @@ - - - -- <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.jar" UploadPathSegment="jar" /> -- <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.pom" UploadPathSegment="jar" /> -+ <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.jar" UploadPathSegment="jar" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> -+ <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.pom" UploadPathSegment="jar" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> - -- <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.tgz" UploadPathSegment="npm" Condition="'$(OS)' == 'Windows_NT' or '$(DotNetBuildOrchestrator)' == 'true'" /> -+ <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.tgz" UploadPathSegment="npm" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.version" UploadPathSegment="Runtime" Condition="'$(PublishInstallerBaseVersion)' == 'true'" /> - - diff --git a/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch b/src/SourceBuild/patches/nuget-client/0001-support-rid-agnostic-publishing.patch similarity index 99% rename from src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch rename to src/SourceBuild/patches/nuget-client/0001-support-rid-agnostic-publishing.patch index 5ffd618ee5f1..b42338bd045d 100644 --- a/src/SourceBuild/nuget-client/0001-support-rid-agnostic-publishing.patch +++ b/src/SourceBuild/patches/nuget-client/0001-support-rid-agnostic-publishing.patch @@ -16,7 +16,7 @@ index 5fe1ceb1a79..664c36c89c4 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -2,7 +2,12 @@ - + @@ -27,5 +27,5 @@ index 5fe1ceb1a79..664c36c89c4 100644 + Visibility="Vertical" + Condition="'$(EnableDefaultRidSpecificArtifacts)' == 'true' and '$(DotNetBuildOrchestrator)' == 'true'" /> - + diff --git a/src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch b/src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch deleted file mode 100644 index 815dab365b30..000000000000 --- a/src/SourceBuild/patches/windowsdesktop/0001-deduplicate-artifacts-in-vmr.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jeremy Koritzinsky -Date: Tue, 21 Jan 2025 15:22:19 -0800 -Subject: Deduplicate artifacts in VMR builds - -Backport: https://github.com/dotnet/windowsdesktop/pull/4960 ---- -diff --git a/eng/Publishing.props b/eng/Publishing.props -index 8f1e1fb81c..a64b2808c4 100644 ---- a/eng/Publishing.props -+++ b/eng/Publishing.props -@@ -8,6 +8,21 @@ - $(TargetArchitecture) - - -+ -+ -+ true -+ true -+ -+ -+ -+ true -+ -+ - - -@@ -22,7 +37,7 @@ - -+ Condition="'$(ShouldGenerateProductVersionFiles)' == 'true'"> - - From 0bac6e31a5efb590c1be021acf1d96a4f259a8b7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 13 Mar 2025 16:01:47 -0700 Subject: [PATCH 12/23] Remove guard on AllowEmptySignList --- src/SourceBuild/content/repo-projects/Directory.Build.targets | 2 +- src/SourceBuild/content/repo-projects/aspnetcore.proj | 2 -- src/SourceBuild/content/repo-projects/roslyn.proj | 2 -- src/SourceBuild/content/repo-projects/runtime.proj | 1 - src/SourceBuild/content/repo-projects/sdk.proj | 2 -- src/SourceBuild/content/repo-projects/windowsdesktop.proj | 2 -- 6 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.targets b/src/SourceBuild/content/repo-projects/Directory.Build.targets index 3094a039c6f2..1246152794d3 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.targets +++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets @@ -45,7 +45,7 @@ $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts) - $(BuildArgs) /p:AllowEmptySignList=true + $(BuildArgs) /p:AllowEmptySignList=true diff --git a/src/SourceBuild/content/repo-projects/aspnetcore.proj b/src/SourceBuild/content/repo-projects/aspnetcore.proj index 2329b0ceb6a6..39d9c72c27b2 100644 --- a/src/SourceBuild/content/repo-projects/aspnetcore.proj +++ b/src/SourceBuild/content/repo-projects/aspnetcore.proj @@ -33,8 +33,6 @@ true - - true diff --git a/src/SourceBuild/content/repo-projects/roslyn.proj b/src/SourceBuild/content/repo-projects/roslyn.proj index f2bbbf768c23..786e486b5bba 100644 --- a/src/SourceBuild/content/repo-projects/roslyn.proj +++ b/src/SourceBuild/content/repo-projects/roslyn.proj @@ -11,8 +11,6 @@ $(ProjectDirectory)build$(ShellExtension) - - true diff --git a/src/SourceBuild/content/repo-projects/runtime.proj b/src/SourceBuild/content/repo-projects/runtime.proj index 4b5620e55276..70ef96bb813b 100644 --- a/src/SourceBuild/content/repo-projects/runtime.proj +++ b/src/SourceBuild/content/repo-projects/runtime.proj @@ -40,7 +40,6 @@ false - true diff --git a/src/SourceBuild/content/repo-projects/sdk.proj b/src/SourceBuild/content/repo-projects/sdk.proj index 5379d19bad5d..4362205220e2 100644 --- a/src/SourceBuild/content/repo-projects/sdk.proj +++ b/src/SourceBuild/content/repo-projects/sdk.proj @@ -36,8 +36,6 @@ $(BuildArgs) /p:PgoInstrument=true $(BuildArgs) /p:DISABLE_CROSSGEN=true - - true diff --git a/src/SourceBuild/content/repo-projects/windowsdesktop.proj b/src/SourceBuild/content/repo-projects/windowsdesktop.proj index f5497650fbdb..411025935413 100644 --- a/src/SourceBuild/content/repo-projects/windowsdesktop.proj +++ b/src/SourceBuild/content/repo-projects/windowsdesktop.proj @@ -7,8 +7,6 @@ $(BuildArgs) $(FlagParameterPrefix)warnAsError $(ArcadeFalseBoolBuildArg) $(BuildArgs) /p:TargetArchitecture=$(TargetArchitecture) - - true From 92f9f697f4fdbd5581d2f61f7116895d5048e657 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 14 Mar 2025 22:23:48 -0700 Subject: [PATCH 13/23] Include the variables template in the final join stage --- eng/pipelines/templates/stages/vmr-build-with-join.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index ef3b77887782..ef6c51052eb9 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -64,6 +64,8 @@ stages: - ${{ each stage in parameters.verticalsStages }}: - ${{ if ne(stage.templateContext.validationOnly, 'true') }}: - ${{ stage.stage }} + variables: + - template: ../variables/vmr-build.yml jobs: - job: FinalJoin displayName: Final Build Pass From 9e50d176c722aa01505ff5a7f3c615cd8665c8b5 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sat, 15 Mar 2025 11:21:54 -0700 Subject: [PATCH 14/23] Fix path for join-verticals script in sdk. --- .../templates/stages/vmr-build-with-join.yml | 11 +++++++++++ eng/pipelines/templates/stages/vmr-build.yml | 1 + eng/pipelines/templates/steps/vmr-join-verticals.yml | 1 + 3 files changed, 13 insertions(+) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index ef6c51052eb9..1ead672ec285 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -9,6 +9,10 @@ parameters: # When we should run the final join stage and the stages that depend on it. - name: finalJoinCondition type: boolean +# True when build is running from dotnet/dotnet directly +- name: isBuiltFromVmr + type: boolean + default: false # These are not expected to be passed it but rather just object variables reused below - name: pool_Linux type: object @@ -106,6 +110,13 @@ stages: displayName: Publish Build Logs sbomEnabled: false condition: succeededOrFailed() + variables: + - ${{ if parameters.isBuiltFromVmr }}: + - name: vmrPath + value: $(Build.SourcesDirectory) + - ${{ else }}: + - name: vmrPath + value: $(Agent.BuildDirectory)/vmr steps: - template: ../steps/vmr-join-verticals.yml parameters: diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml index 67d57c8a9fce..63ffbe3a9e8a 100644 --- a/eng/pipelines/templates/stages/vmr-build.yml +++ b/eng/pipelines/templates/stages/vmr-build.yml @@ -86,6 +86,7 @@ stages: scope: ${{ parameters.scope }} isSourceOnlyBuild: ${{ parameters.isSourceOnlyBuild }} finalJoinCondition: ${{ and(not(parameters.isSourceOnlyBuild), eq(parameters.scope, 'full')) }} + isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} postJoinStages: - ${{ if and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - stage: Publish_Build_Assets diff --git a/eng/pipelines/templates/steps/vmr-join-verticals.yml b/eng/pipelines/templates/steps/vmr-join-verticals.yml index a3f619882827..78abc97b3d91 100644 --- a/eng/pipelines/templates/steps/vmr-join-verticals.yml +++ b/eng/pipelines/templates/steps/vmr-join-verticals.yml @@ -14,6 +14,7 @@ steps: /p:VerticalArtifactsBaseFolder=$(Build.ArtifactStagingDirectory)/VerticalArtifacts /p:OutputFolder=${{ parameters.outputFolder }} displayName: Join Verticals + workingDirectory: ${{ variables.vmrPath }} - task: CopyFiles@2 displayName: Copy logs for upload inputs: From baa945c3829a2c91cfcd035e434c58d278483d8b Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sun, 16 Mar 2025 12:20:53 -0700 Subject: [PATCH 15/23] Clone and sync the vmr in the join job when building it from sdk --- .../templates/stages/vmr-build-with-join.yml | 25 +++++++++++++++++-- eng/pipelines/templates/stages/vmr-build.yml | 1 + 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index 1ead672ec285..edd25ac21eb0 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -9,10 +9,17 @@ parameters: # When we should run the final join stage and the stages that depend on it. - name: finalJoinCondition type: boolean -# True when build is running from dotnet/dotnet directly + +#### sdk parameters #### + - name: isBuiltFromVmr + displayName: True when build is running from dotnet/dotnet directly type: boolean - default: false + +- name: vmrBranch + displayName: dotnet/dotnet branch to use + type: string + # These are not expected to be passed it but rather just object variables reused below - name: pool_Linux type: object @@ -118,6 +125,20 @@ stages: - name: vmrPath value: $(Agent.BuildDirectory)/vmr steps: + - ${{ if not(parameters.isBuiltFromVmr) }}: + - template: ../steps/vmr-prepare.yml@self + parameters: + ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + vmrBranch: $(System.PullRequest.TargetBranch) + ${{ else }}: + vmrBranch: ${{ parameters.vmrBranch }} + + - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - template: ../steps/vmr-pull-updates.yml@self + parameters: + vmrPath: $(vmrPath) + vmrBranch: ${{ parameters.vmrBranch }} + targetRef: $(Build.SourceVersion) # Synchronize the current sdk commit - template: ../steps/vmr-join-verticals.yml parameters: dotNetBuildPass: final diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml index 63ffbe3a9e8a..ed4352fb1399 100644 --- a/eng/pipelines/templates/stages/vmr-build.yml +++ b/eng/pipelines/templates/stages/vmr-build.yml @@ -86,6 +86,7 @@ stages: scope: ${{ parameters.scope }} isSourceOnlyBuild: ${{ parameters.isSourceOnlyBuild }} finalJoinCondition: ${{ and(not(parameters.isSourceOnlyBuild), eq(parameters.scope, 'full')) }} + vmrBranch: ${{ parameters.vmrBranch }} isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }} postJoinStages: - ${{ if and(parameters.isBuiltFromVmr, not(parameters.isSourceOnlyBuild), eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: From 5d6a5cd7a15d60af56b9dfebb0e554ee72af3350 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sun, 16 Mar 2025 16:41:43 -0700 Subject: [PATCH 16/23] Try different approach for the vmr branch and adjust the artifacts name --- eng/pipelines/templates/stages/vmr-build-with-join.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index edd25ac21eb0..d6b0c83d6bf1 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -11,7 +11,6 @@ parameters: type: boolean #### sdk parameters #### - - name: isBuiltFromVmr displayName: True when build is running from dotnet/dotnet directly type: boolean @@ -88,7 +87,7 @@ stages: # Download the artifacts from every job in every vertical stage under VerticalArtifacts - ${{ each stage in parameters.verticalsStages }}: - ${{ if ne(stage.templateContext.validationOnly, 'true') }}: - - ${{ each vertical in stage.jobs.*.job }}: + - ${{ each vertical in stage.jobs }}: - input: pipelineArtifact path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical.job }} artifactName: ${{ vertical.job }}_Artifacts @@ -124,6 +123,9 @@ stages: - ${{ else }}: - name: vmrPath value: $(Agent.BuildDirectory)/vmr + - template: ../variables/vmr-build.yml + parameters: + vmrBranch: ${{ parameters.vmrBranch }} steps: - ${{ if not(parameters.isBuiltFromVmr) }}: - template: ../steps/vmr-prepare.yml@self @@ -131,13 +133,13 @@ stages: ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: vmrBranch: $(System.PullRequest.TargetBranch) ${{ else }}: - vmrBranch: ${{ parameters.vmrBranch }} + vmrBranch: ${{ variables.VmrBranch }} - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: - template: ../steps/vmr-pull-updates.yml@self parameters: vmrPath: $(vmrPath) - vmrBranch: ${{ parameters.vmrBranch }} + vmrBranch: ${{ variables.VmrBranch }} targetRef: $(Build.SourceVersion) # Synchronize the current sdk commit - template: ../steps/vmr-join-verticals.yml parameters: From 02c01967dc153c6e3701b46a0f3213f6a2ca7193 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 17 Mar 2025 10:35:42 -0700 Subject: [PATCH 17/23] Move variables up a scope --- .../templates/stages/vmr-build-with-join.yml | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index d6b0c83d6bf1..366a1c401f25 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -75,7 +75,15 @@ stages: - ${{ if ne(stage.templateContext.validationOnly, 'true') }}: - ${{ stage.stage }} variables: + - ${{ if parameters.isBuiltFromVmr }}: + - name: vmrPath + value: $(Build.SourcesDirectory) + - ${{ else }}: + - name: vmrPath + value: $(Agent.BuildDirectory)/vmr - template: ../variables/vmr-build.yml + parameters: + vmrBranch: ${{ parameters.vmrBranch }} jobs: - job: FinalJoin displayName: Final Build Pass @@ -116,16 +124,6 @@ stages: displayName: Publish Build Logs sbomEnabled: false condition: succeededOrFailed() - variables: - - ${{ if parameters.isBuiltFromVmr }}: - - name: vmrPath - value: $(Build.SourcesDirectory) - - ${{ else }}: - - name: vmrPath - value: $(Agent.BuildDirectory)/vmr - - template: ../variables/vmr-build.yml - parameters: - vmrBranch: ${{ parameters.vmrBranch }} steps: - ${{ if not(parameters.isBuiltFromVmr) }}: - template: ../steps/vmr-prepare.yml@self @@ -138,7 +136,7 @@ stages: - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: - template: ../steps/vmr-pull-updates.yml@self parameters: - vmrPath: $(vmrPath) + vmrPath: ${{ variables.vmrPath }} vmrBranch: ${{ variables.VmrBranch }} targetRef: $(Build.SourceVersion) # Synchronize the current sdk commit - template: ../steps/vmr-join-verticals.yml From 5ce08e6976a1287017842493d42a97b3c6bb5648 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 17 Mar 2025 15:15:16 -0700 Subject: [PATCH 18/23] Try fetching the path differently --- eng/pipelines/templates/stages/vmr-build-with-join.yml | 1 + eng/pipelines/templates/steps/vmr-join-verticals.yml | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index 366a1c401f25..4a9b91d9a4fb 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -142,6 +142,7 @@ stages: - template: ../steps/vmr-join-verticals.yml parameters: dotNetBuildPass: final + vmrPath: $(vmrPath) outputFolder: $(Build.ArtifactStagingDirectory)/artifacts # Insert all of the post-join stages. - ${{ each postJoinStage in parameters.postJoinStages }}: diff --git a/eng/pipelines/templates/steps/vmr-join-verticals.yml b/eng/pipelines/templates/steps/vmr-join-verticals.yml index 78abc97b3d91..5d13d4e02018 100644 --- a/eng/pipelines/templates/steps/vmr-join-verticals.yml +++ b/eng/pipelines/templates/steps/vmr-join-verticals.yml @@ -3,6 +3,10 @@ parameters: type: string default: final +- name: vmrPath + type: string + default: $(Agent.BuildDirectory)/vmr + - name: outputFolder type: string default: $(Build.ArtifactStagingDirectory)/artifacts @@ -14,7 +18,7 @@ steps: /p:VerticalArtifactsBaseFolder=$(Build.ArtifactStagingDirectory)/VerticalArtifacts /p:OutputFolder=${{ parameters.outputFolder }} displayName: Join Verticals - workingDirectory: ${{ variables.vmrPath }} + workingDirectory: ${{ parameters.vmrPath }} - task: CopyFiles@2 displayName: Copy logs for upload inputs: From 4b7fa8e1ad40784872e7c54b4e00c54872af5e9e Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 17 Mar 2025 23:06:18 -0700 Subject: [PATCH 19/23] Add download steps for the public build --- .../templates/stages/vmr-build-with-join.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/eng/pipelines/templates/stages/vmr-build-with-join.yml b/eng/pipelines/templates/stages/vmr-build-with-join.yml index 4a9b91d9a4fb..845a5003953b 100644 --- a/eng/pipelines/templates/stages/vmr-build-with-join.yml +++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml @@ -125,6 +125,21 @@ stages: sbomEnabled: false condition: succeededOrFailed() steps: + - ${{ if ne(variables['System.TeamProject'], 'internal') }}: + - task: DownloadPipelineArtifact@2 + displayName: Download asset manifests + inputs: + path: $(Build.ArtifactStagingDirectory)/VerticalManifests + artifactName: VerticalManifests + # Download the artifacts from every job in every vertical stage under VerticalArtifacts + - ${{ each stage in parameters.verticalsStages }}: + - ${{ if ne(stage.templateContext.validationOnly, 'true') }}: + - ${{ each vertical in stage.jobs }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Artifacts for ${{ vertical.job }} + inputs: + path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical.job }} + artifactName: ${{ vertical.job }}_Artifacts - ${{ if not(parameters.isBuiltFromVmr) }}: - template: ../steps/vmr-prepare.yml@self parameters: From 28c6c5bc585c06bf19d9a0b2231cdadb09e7b4c9 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 18 Mar 2025 11:38:28 -0700 Subject: [PATCH 20/23] Add parameter for forwarding --- eng/pipelines/templates/stages/vmr-verticals.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/vmr-verticals.yml b/eng/pipelines/templates/stages/vmr-verticals.yml index c62cdff4402b..c93ee9bf5a08 100644 --- a/eng/pipelines/templates/stages/vmr-verticals.yml +++ b/eng/pipelines/templates/stages/vmr-verticals.yml @@ -11,6 +11,10 @@ parameters: type: string default: '' +- name: desiredIbc + type: string + default: '' + # Scope of jobs which are executed - name: scope type: string @@ -398,6 +402,7 @@ stages: parameters: vmrBranch: ${{ parameters.vmrBranch }} desiredSigning: ${{ parameters.desiredSigning }} + desiredIBC: ${{ parameters.desiredIBC }} jobs: - template: ../jobs/vmr-build.yml @@ -917,4 +922,4 @@ stages: reuseBuildArtifactsFrom: - Windows_x64 - Windows_x86 - - Windows_arm64 \ No newline at end of file + - Windows_arm64 From 172bbce0f2110e8955bd4981b2ffde43999547a2 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 18 Mar 2025 16:43:01 -0700 Subject: [PATCH 21/23] Inline always-true if body --- .../JoinVerticalsAssetSelector.cs | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs index f0458269285e..957bbc93f8fb 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/ManifestAssets/JoinVerticalsAssetSelector.cs @@ -66,25 +66,22 @@ bool IsExternalAsset(ManifestAsset asset) { string assetId = assetGroup.Key; - int verticalsCount = assetGroup.Count(); var verticalNames = assetGroup.Select(o => o.manifest.VerticalName!).ToList(); - if (verticalsCount > 0) + + (AssetVerticalMatchType matchType, string verticalName) = SelectVerticalForAsset(verticalNames); + + AssetVerticalMatchResult assetVerticalMatch = new AssetVerticalMatchResult + { + AssetId = assetGroup.Key, + MatchType = matchType, + VerticalName = verticalName, + Asset = assetGroup.FirstOrDefault().asset, + OtherVerticals = assetGroup.Select(o => o.manifest.VerticalName!).Skip(1).ToList() + }; + + if (!ExcludeAsset(assetVerticalMatch)) { - (AssetVerticalMatchType matchType, string verticalName) = SelectVerticalForAsset(verticalNames); - - AssetVerticalMatchResult assetVerticalMatch = new AssetVerticalMatchResult - { - AssetId = assetGroup.Key, - MatchType = matchType, - VerticalName = verticalName, - Asset = assetGroup.FirstOrDefault().asset, - OtherVerticals = assetGroup.Select(o => o.manifest.VerticalName!).Skip(1).ToList() - }; - - if (!ExcludeAsset(assetVerticalMatch)) - { - yield return assetVerticalMatch; - } + yield return assetVerticalMatch; } } } From a96232f62ef9ed904bfa5171f123869a252ebe45 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 18 Mar 2025 16:44:51 -0700 Subject: [PATCH 22/23] Make unmatched assets an error --- .../Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs index aa987d7d4893..c17b3da5c63a 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs @@ -50,7 +50,7 @@ public override bool Execute() List selectedVerticals = joinVerticalsAssetSelector.SelectAssetMatchingVertical(manifests).ToList(); var notMatchedAssets = selectedVerticals.Where(o => o.MatchType == AssetVerticalMatchType.NotSpecified).ToList(); - Log.LogMessage(MessageImportance.High, $"### {notMatchedAssets.Count} Assets not properly matched to vertical: ###"); + Log.LogError($"### {notMatchedAssets.Count} Assets not properly matched to vertical: ###"); foreach (var matchResult in notMatchedAssets) { Log.LogMessage(MessageImportance.High, $"Asset: {matchResult.AssetId} -- Matched to: {matchResult.VerticalName}, Other verticals: {string.Join(", ", matchResult.OtherVerticals)}"); @@ -85,7 +85,7 @@ public override bool Execute() CopyVerticalAssets(Path.Combine(VerticalArtifactsBaseFolder, verticalName, _packagesFolderName, _releaseFolderName), packagesOutputDirectory, assetListPackages); CopyVerticalAssets(Path.Combine(VerticalArtifactsBaseFolder, verticalName, _assetsFolderName, _releaseFolderName), assetsOutputDirectory, assetListBlobs); } - + return !Log.HasLoggedErrors; From 3d66265a1607c833eed7eead9e7683ec3a1b2d15 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 18 Mar 2025 16:45:58 -0700 Subject: [PATCH 23/23] Log unmatched assets only when there are any --- .../JoinVerticals.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs index c17b3da5c63a..dd77d71ea108 100644 --- a/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs +++ b/src/SourceBuild/content/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/JoinVerticals.cs @@ -50,12 +50,14 @@ public override bool Execute() List selectedVerticals = joinVerticalsAssetSelector.SelectAssetMatchingVertical(manifests).ToList(); var notMatchedAssets = selectedVerticals.Where(o => o.MatchType == AssetVerticalMatchType.NotSpecified).ToList(); - Log.LogError($"### {notMatchedAssets.Count} Assets not properly matched to vertical: ###"); - foreach (var matchResult in notMatchedAssets) + if (notMatchedAssets.Count > 0) { - Log.LogMessage(MessageImportance.High, $"Asset: {matchResult.AssetId} -- Matched to: {matchResult.VerticalName}, Other verticals: {string.Join(", ", matchResult.OtherVerticals)}"); + Log.LogError($"### {notMatchedAssets.Count} Assets not properly matched to vertical: ###"); + foreach (var matchResult in notMatchedAssets) + { + Log.LogMessage(MessageImportance.High, $"Asset: {matchResult.AssetId} -- Matched to: {matchResult.VerticalName}, Other verticals: {string.Join(", ", matchResult.OtherVerticals)}"); + } } - // save manifest and download all the assets string packagesOutputDirectory = Path.Combine(OutputFolder, _packagesFolderName); ForceDirectory(packagesOutputDirectory);