diff --git a/eng/Publishing.props b/eng/Publishing.props
index a725552b67b3..916c58f18b8f 100644
--- a/eng/Publishing.props
+++ b/eng/Publishing.props
@@ -15,11 +15,18 @@
Shipping
Release
+
+ Vertical
+ External
+ Kind="Package"
+ Visibility="$(FSharpArtifactVisibility)" />
@@ -53,7 +60,7 @@
-
+
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..845a5003953b
--- /dev/null
+++ b/eng/pipelines/templates/stages/vmr-build-with-join.yml
@@ -0,0 +1,174 @@
+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
+
+#### sdk parameters ####
+- name: isBuiltFromVmr
+ displayName: True when build is running from dotnet/dotnet directly
+ type: boolean
+
+- 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
+ 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:
+# Insert all stages that build verticals
+# and publish artifacts for each 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:
+ - ${{ each stage in parameters.verticalsStages }}:
+ - ${{ 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
+ pool: ${{ parameters.pool_Windows }}
+ timeoutInMinutes: 240
+ templateContext:
+ outputParentDirectory: $(Build.ArtifactStagingDirectory)/artifacts
+ inputs:
+ # 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 }}:
+ - input: pipelineArtifact
+ path: $(Build.ArtifactStagingDirectory)/VerticalArtifacts/${{ vertical.job }}
+ artifactName: ${{ vertical.job }}_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:
+ - ${{ 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:
+ ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
+ vmrBranch: $(System.PullRequest.TargetBranch)
+ ${{ else }}:
+ vmrBranch: ${{ variables.VmrBranch }}
+
+ - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
+ - template: ../steps/vmr-pull-updates.yml@self
+ parameters:
+ vmrPath: ${{ variables.vmrPath }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ targetRef: $(Build.SourceVersion) # Synchronize the current sdk commit
+ - 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 }}:
+ - 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, '') }}:
+ - ${{ 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 728c1fcfcfa1..9523c854dcbc 100644
--- a/eng/pipelines/templates/stages/vmr-build.yml
+++ b/eng/pipelines/templates/stages/vmr-build.yml
@@ -78,946 +78,81 @@ 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
- 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
+- template: vmr-build-with-join.yml
+ parameters:
+ verticalsStages:
+ - template: vmr-verticals.yml
parameters:
- buildName: Windows_BuildTests
+ vmrBranch: ${{ parameters.vmrBranch }}
+ desiredSigning: ${{ parameters.desiredSigning }}
+ desiredIbc: ${{ parameters.desiredIbc }}
isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
- vmrBranch: ${{ variables.VmrBranch }}
+ 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')) }}:
+ - 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 }}
+ desiredIbc: ${{ parameters.desiredIbc }}
+ - group: Release-Pipeline
+ - group: DotNetBot-GitHub-AllBranches
+ jobs:
+ - job: ValidateAssetBaselines
+ displayName: Validate Asset Baselines
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 }}
- desiredIBC: ${{ parameters.desiredIBC }}
- 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
+ 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
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:
- - Windows_x64
- - Windows_x86
- - Windows_arm64
- - 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
-
- - 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
- buildPass: 2
- reuseBuildArtifactsFrom:
- - Windows_x64
- - Windows_x86
- - Windows_arm64
-
-### 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:
- - 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
- parameters:
- continueOnError: true
- - ${{ 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
+ 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..c93ee9bf5a08
--- /dev/null
+++ b/eng/pipelines/templates/stages/vmr-verticals.yml
@@ -0,0 +1,925 @@
+### 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: ''
+
+- name: desiredIbc
+ 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
+ templateContext:
+ validationOnly: true
+ 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 }}
+ desiredIBC: ${{ parameters.desiredIBC }}
+ 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:
+ - Windows_x64
+ - Windows_x86
+ - Windows_arm64
+ - 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
+
+ - 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
+ buildPass: 2
+ reuseBuildArtifactsFrom:
+ - Windows_x64
+ - Windows_x86
+ - Windows_arm64
diff --git a/eng/pipelines/templates/steps/vmr-join-verticals.yml b/eng/pipelines/templates/steps/vmr-join-verticals.yml
index 50b1866b098f..5d13d4e02018 100644
--- a/eng/pipelines/templates/steps/vmr-join-verticals.yml
+++ b/eng/pipelines/templates/steps/vmr-join-verticals.yml
@@ -3,35 +3,28 @@ parameters:
type: string
default: final
-- name: primaryDependentJob
+- name: vmrPath
type: string
- default: Windows_x64
+ default: $(Agent.BuildDirectory)/vmr
- 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
+ workingDirectory: ${{ parameters.vmrPath }}
+- 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/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..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
@@ -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,30 @@ 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: ###");
- 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);
@@ -109,20 +70,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 +84,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);
}
- 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);
+ return !Log.HasLoggedErrors;
- 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 +112,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..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
@@ -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)
{
@@ -74,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(o => VerticalNameMatches(o.manifest.VerticalName, verticalName)).asset,
- OtherVerticals = assetGroup.Select(o => o.manifest.VerticalName!).Where(o => !VerticalNameMatches(o, verticalName)).ToList()
- };
-
- if (!ExcludeAsset(assetVerticalMatch))
- {
- yield return assetVerticalMatch;
- }
+ yield return assetVerticalMatch;
}
}
}
@@ -105,12 +94,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 0555ceeb8792..8094987951d1 100644
--- a/src/SourceBuild/content/repo-projects/Directory.Build.props
+++ b/src/SourceBuild/content/repo-projects/Directory.Build.props
@@ -59,6 +59,18 @@
$([MSBuild]::NormalizeDirectory('$(ArtifactsLogDir)', '$(RepositoryName)'))
$([MSBuild]::NormalizeDirectory('$(PackageReportDir)', '$(RepositoryName)'))
+
+ Windows_x64
+
+
+ true
@@ -114,9 +126,9 @@
$(CommonArgs) /p:SourceBuiltAssetManifestsDir=$(RepoAssetManifestsDir)
- $(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 9a756269b4e9..948a13728f66 100644
--- a/src/SourceBuild/content/repo-projects/Directory.Build.targets
+++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets
@@ -38,9 +38,14 @@
$(CommonArgs) /p:PortableBuild=$(PortableBuild)
$(CommonArgs) /p:RuntimeOS=$(RuntimeOS)
$(CommonArgs) /p:BaseOS=$(BaseOS)
+ $(CommonArgs) /p:DefaultArtifactVisibility=$(DefaultArtifactVisibility)
$(CommonArgs) /p:DotNetBuildTests=true
+
+ $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=$(EnableDefaultRidSpecificArtifacts)
+
+ $(BuildArgs) /p:AllowEmptySignList=true
diff --git a/src/SourceBuild/content/repo-projects/runtime.proj b/src/SourceBuild/content/repo-projects/runtime.proj
index 7f4553a8be70..70ef96bb813b 100644
--- a/src/SourceBuild/content/repo-projects/runtime.proj
+++ b/src/SourceBuild/content/repo-projects/runtime.proj
@@ -37,17 +37,9 @@
true
-
-
- true
- $(BuildArgs) /p:EnableDefaultRidSpecificArtifacts=true
+
+
+ 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 79%
rename from src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVertialsTests.cs
rename to src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVerticalsTests.cs
index 2785ebb7cef1..50baa6399135 100644
--- a/src/SourceBuild/content/test/Microsoft.DotNet.Tests/JoinVertialsTests.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
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