From fca8b9420a5554862875ec5180fda2a08ca1eda8 Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Thu, 26 Feb 2026 15:34:06 -0800 Subject: [PATCH 1/5] Move Libraries Test Run checked coreclr osx arm64 to Linux runner The job only downloads pre-built artifacts and submits tests to Helix, so it does not need a native macOS Azure DevOps runner. Use the existing hostedOs mechanism to run the orchestrating agent on Linux while keeping tests on macOS ARM64 Helix queues. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/libraries/run-test-job.yml | 3 ++- eng/pipelines/runtime.yml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/libraries/run-test-job.yml b/eng/pipelines/libraries/run-test-job.yml index 75f35341da2d97..e0fcd4f37c55e8 100644 --- a/eng/pipelines/libraries/run-test-job.yml +++ b/eng/pipelines/libraries/run-test-job.yml @@ -11,6 +11,7 @@ parameters: interpreter: '' timeoutInMinutes: 150 pool: '' + hostedOs: '' runtimeVariant: '' testScope: '' helixQueues: [] @@ -91,7 +92,7 @@ jobs: - template: /eng/common/${{ parameters.templatePath }}/steps/enable-internal-sources.yml - - ${{ if in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator') }}: + - ${{ if and(in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator'), not(in(parameters.hostedOs, 'linux', 'windows'))) }}: - script: $(Build.SourcesDirectory)/eng/common/native/install-dependencies.sh ${{ parameters.osGroup }} displayName: Install Build Dependencies diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 9af74955c577b2..ab341195bd2bb6 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -1880,6 +1880,7 @@ extends: jobParameters: testScope: innerloop liveRuntimeBuildConfig: checked + hostedOs: linux unifiedArtifactsName: Libraries_CheckedCoreCLR_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) helixArtifactsName: Libraries_CheckedCoreCLR_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) unifiedBuildNameSuffix: Libraries_CheckedCoreCLR From 3f8d9a058a4b3160cf008292c13d2839c547f01d Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Thu, 26 Feb 2026 16:01:51 -0800 Subject: [PATCH 2/5] Move Installer_Build_And_Test to Installer_Test on Linux runners - Add host+packs to upstream CoreCLR_Libraries builds so installer test artifacts are produced during the initial build phase - Upload installer test artifacts (artifacts/tests/) from upstream builds - Rename Installer_Build_And_Test to Installer_Test and set skipBuild to skip the local build step since all artifacts are pre-built - Split OSX platforms (osx_x64, osx_arm64) into separate job definitions with hostedOs: linux to run the AzDO agent on Linux - Add skipBuild parameter to global-build-job.yml to support test-only jobs that download artifacts and submit to Helix without building - Guard macOS-specific install-dependencies and disk-usage steps in global-build-job.yml against hostedOs override Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/common/global-build-job.yml | 46 ++++---- eng/pipelines/runtime.yml | 131 ++++++++++++++++++++-- 2 files changed, 144 insertions(+), 33 deletions(-) diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml index f6d09760772a26..7a66a8cf8d44d9 100644 --- a/eng/pipelines/common/global-build-job.yml +++ b/eng/pipelines/common/global-build-job.yml @@ -2,6 +2,7 @@ parameters: buildConfig: '' nameSuffix: '' buildArgs: '' + skipBuild: false archType: '' hostedOs: '' osGroup: '' @@ -174,7 +175,7 @@ jobs: - template: /eng/common/${{ parameters.templatePath }}/steps/enable-internal-sources.yml - - ${{ if in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator') }}: + - ${{ if and(in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator'), not(in(parameters.hostedOs, 'linux', 'windows'))) }}: - script: $(Build.SourcesDirectory)/eng/common/native/install-dependencies.sh ${{ parameters.osGroup }} displayName: Install Build Dependencies @@ -214,29 +215,30 @@ jobs: - ${{ else }}: - ${{ preBuildStep }} - # Build - - template: /eng/pipelines/common/templates/global-build-step.yml - parameters: - buildArgs: ${{ parameters.buildArgs }} - useContinueOnErrorDuringBuild: ${{ parameters.useContinueOnErrorDuringBuild }} - shouldContinueOnError: ${{ parameters.shouldContinueOnError }} - - - task: CopyFiles@2 - displayName: Gather CMakeConfigureLog for publish to artifacts - inputs: - SourceFolder: 'artifacts/obj' - Contents: '**/CMakeConfigureLog.yaml' - TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/log/cmake' - continueOnError: true - condition: always() - - - ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos', 'android') }}: - - script: | - du -sh $(Build.SourcesDirectory)/* - df -h - displayName: Disk Usage after Build + - ${{ if ne(parameters.skipBuild, true) }}: + # Build + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: ${{ parameters.buildArgs }} + useContinueOnErrorDuringBuild: ${{ parameters.useContinueOnErrorDuringBuild }} + shouldContinueOnError: ${{ parameters.shouldContinueOnError }} + + - task: CopyFiles@2 + displayName: Gather CMakeConfigureLog for publish to artifacts + inputs: + SourceFolder: 'artifacts/obj' + Contents: '**/CMakeConfigureLog.yaml' + TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/log/cmake' + continueOnError: true condition: always() + - ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos', 'android') }}: + - script: | + du -sh $(Build.SourcesDirectory)/* + df -h + displayName: Disk Usage after Build + condition: always() + # If intended to send extra steps after regular build add them here. - ${{ if ne(parameters.postBuildSteps,'') }}: - ${{ each postBuildStep in parameters.postBuildSteps }}: diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index ab341195bd2bb6..464d408adbf66c 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -250,7 +250,7 @@ extends: - windows_x64 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+libs.tests -rc Release -c $(_BuildConfig) /p:ArchiveTests=true + buildArgs: -s clr+libs+libs.tests+host+packs -rc Release -c $(_BuildConfig) /p:ArchiveTests=true timeoutInMinutes: 120 postBuildSteps: - template: /eng/pipelines/common/upload-artifact-step.yml @@ -270,6 +270,15 @@ extends: archiveExtension: $(archiveExtension) tarCompression: $(tarCompression) artifactName: CoreCLR_Libraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) + - template: /eng/pipelines/common/upload-artifact-step.yml + parameters: + rootFolder: $(Build.SourcesDirectory)/artifacts/tests + includeRootFolder: false + archiveType: $(archiveType) + archiveExtension: $(archiveExtension) + tarCompression: $(tarCompression) + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) + displayName: Installer Test Assets condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), @@ -284,7 +293,7 @@ extends: - windows_x86 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true + buildArgs: -s clr+libs+libs.tests+host+packs -c $(_BuildConfig) /p:ArchiveTests=true timeoutInMinutes: 120 postBuildSteps: - template: /eng/pipelines/common/upload-artifact-step.yml @@ -304,6 +313,15 @@ extends: archiveExtension: $(archiveExtension) tarCompression: $(tarCompression) artifactName: CoreCLR_Libraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) + - template: /eng/pipelines/common/upload-artifact-step.yml + parameters: + rootFolder: $(Build.SourcesDirectory)/artifacts/tests + includeRootFolder: false + archiveType: $(archiveType) + archiveExtension: $(archiveExtension) + tarCompression: $(tarCompression) + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) + displayName: Installer Test Assets condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), @@ -322,7 +340,7 @@ extends: - osx_x64 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs -c $(_BuildConfig) + buildArgs: -s clr+libs+host+packs -c $(_BuildConfig) timeoutInMinutes: 120 postBuildSteps: - template: /eng/pipelines/common/upload-artifact-step.yml @@ -334,6 +352,15 @@ extends: tarCompression: $(tarCompression) artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) displayName: Build Assets + - template: /eng/pipelines/common/upload-artifact-step.yml + parameters: + rootFolder: $(Build.SourcesDirectory)/artifacts/tests + includeRootFolder: false + archiveType: $(archiveType) + archiveExtension: $(archiveExtension) + tarCompression: $(tarCompression) + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig) + displayName: Installer Test Assets condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), @@ -1449,9 +1476,7 @@ extends: eq(variables['isRollingBuild'], true)) # - # Installer Build and Test - # These are always built since they only take like 15 minutes - # we expect these to be done before we finish libraries or coreclr testing. + # Installer Test # - template: /eng/pipelines/common/platform-matrix.yml parameters: @@ -1459,11 +1484,47 @@ extends: buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - windows_x86 + helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml + jobParameters: + nameSuffix: Installer_Test + skipBuild: true + dependsOnGlobalBuilds: + - nameSuffix: CoreCLR_Libraries + buildConfig: release + preBuildSteps: + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release + artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) + unpackFolder: $(Build.SourcesDirectory)/artifacts/bin + displayName: 'unified artifacts' + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release + artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) + unpackFolder: $(Build.SourcesDirectory)/artifacts/tests + displayName: 'installer test artifacts' + timeoutInMinutes: 150 + postBuildSteps: + - template: /eng/pipelines/installer/helix.yml + parameters: + creator: dotnet-bot + condition: + or( + eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), + eq(variables['isRollingBuild'], true)) + + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} + platforms: - osx_x64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: - nameSuffix: Installer_Build_And_Test - buildArgs: -s host+packs -c $(_BuildConfig) -lc Release -rc Release + nameSuffix: Installer_Test + skipBuild: true + hostedOs: linux dependsOnGlobalBuilds: - nameSuffix: CoreCLR_Libraries buildConfig: release @@ -1474,6 +1535,12 @@ extends: artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) unpackFolder: $(Build.SourcesDirectory)/artifacts/bin displayName: 'unified artifacts' + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release + artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) + unpackFolder: $(Build.SourcesDirectory)/artifacts/tests + displayName: 'installer test artifacts' timeoutInMinutes: 150 postBuildSteps: - template: /eng/pipelines/installer/helix.yml @@ -1490,12 +1557,48 @@ extends: buildConfig: release platforms: - windows_x64 - - osx_arm64 - linux_x64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: - nameSuffix: Installer_Build_And_Test - buildArgs: -s host+packs -c $(_BuildConfig) -lc ${{ variables.debugOnPrReleaseOnRolling }} -rc Release + nameSuffix: Installer_Test + skipBuild: true + dependsOnGlobalBuilds: + - nameSuffix: CoreCLR_Libraries + buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} + preBuildSteps: + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) + artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) + unpackFolder: $(Build.SourcesDirectory)/artifacts/bin + displayName: 'unified artifacts' + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) + artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) + unpackFolder: $(Build.SourcesDirectory)/artifacts/tests + displayName: 'installer test artifacts' + timeoutInMinutes: 150 + postBuildSteps: + - template: /eng/pipelines/installer/helix.yml + parameters: + creator: dotnet-bot + condition: + or( + eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), + eq(variables['isRollingBuild'], true)) + + - template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + buildConfig: release + platforms: + - osx_arm64 + helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml + jobParameters: + nameSuffix: Installer_Test + skipBuild: true + hostedOs: linux dependsOnGlobalBuilds: - nameSuffix: CoreCLR_Libraries buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} @@ -1506,6 +1609,12 @@ extends: artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) unpackFolder: $(Build.SourcesDirectory)/artifacts/bin displayName: 'unified artifacts' + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) + artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) + unpackFolder: $(Build.SourcesDirectory)/artifacts/tests + displayName: 'installer test artifacts' timeoutInMinutes: 150 postBuildSteps: - template: /eng/pipelines/installer/helix.yml From c027694c7edee1c093d0cc2d2a2ee122aa75e6bb Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Mon, 2 Mar 2026 14:21:46 -0800 Subject: [PATCH 3/5] Fix host+packs config: build as separate step with original configs The host+packs build uses different -c/-lc/-rc configs than the main clr+libs build. Build host+packs as a separate postBuildStep in each upstream CoreCLR_Libraries job to preserve the exact old behavior: - Release upstream (win_x86, osx_x64): host+packs at debugOnPrReleaseOnRolling config with -lc Release -rc Release (matches old Job 1) - debugOnPrReleaseOnRolling upstream (multi-platform): host+packs at Release config with -lc debugOnPrReleaseOnRolling -rc Release (matches old Job 2) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/runtime.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 464d408adbf66c..31c57cb9beb6ba 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -250,9 +250,11 @@ extends: - windows_x64 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+libs.tests+host+packs -rc Release -c $(_BuildConfig) /p:ArchiveTests=true + buildArgs: -s clr+libs+libs.tests -rc Release -c $(_BuildConfig) /p:ArchiveTests=true timeoutInMinutes: 120 postBuildSteps: + - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) -s host+packs -c Release -lc $(_BuildConfig) -rc Release $(_officialBuildParameter) + displayName: Build host+packs - template: /eng/pipelines/common/upload-artifact-step.yml parameters: rootFolder: $(Build.SourcesDirectory)/artifacts/bin @@ -293,9 +295,11 @@ extends: - windows_x86 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+libs.tests+host+packs -c $(_BuildConfig) /p:ArchiveTests=true + buildArgs: -s clr+libs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true timeoutInMinutes: 120 postBuildSteps: + - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) -s host+packs -c $(debugOnPrReleaseOnRolling) -lc $(_BuildConfig) -rc $(_BuildConfig) $(_officialBuildParameter) + displayName: Build host+packs - template: /eng/pipelines/common/upload-artifact-step.yml parameters: rootFolder: $(Build.SourcesDirectory)/artifacts/bin @@ -340,9 +344,11 @@ extends: - osx_x64 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+host+packs -c $(_BuildConfig) + buildArgs: -s clr+libs -c $(_BuildConfig) timeoutInMinutes: 120 postBuildSteps: + - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) -s host+packs -c $(debugOnPrReleaseOnRolling) -lc $(_BuildConfig) -rc $(_BuildConfig) $(_officialBuildParameter) + displayName: Build host+packs - template: /eng/pipelines/common/upload-artifact-step.yml parameters: rootFolder: $(Build.SourcesDirectory)/artifacts/bin From 710832d9d90620e092b1420033e3338b9d1ea6d6 Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Tue, 3 Mar 2026 16:41:33 -0800 Subject: [PATCH 4/5] Fix pool selection: guard macOS pool against hostedOs override When hostedOs is set to 'linux' or 'windows', the macOS pool conditions must not match, otherwise they override the Linux/Windows pool selected by the hostedOs check. Add not(in(hostedOs, 'linux', 'windows')) guard to both public and internal macOS pool conditions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/common/xplat-setup.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/common/xplat-setup.yml b/eng/pipelines/common/xplat-setup.yml index d8c7b3469ac7aa..ea9ea44d1a5c76 100644 --- a/eng/pipelines/common/xplat-setup.yml +++ b/eng/pipelines/common/xplat-setup.yml @@ -176,11 +176,11 @@ jobs: os: linux # OSX Public Build Pool (we don't have on-prem OSX BuildPool). - ${{ if and(in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator'), eq(variables['System.TeamProject'], 'public')) }}: + ${{ if and(in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator'), not(in(parameters.jobParameters.hostedOs, 'linux', 'windows')), eq(variables['System.TeamProject'], 'public')) }}: vmImage: 'macos-15' # Official build OSX pool - ${{ if and(in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator'), ne(variables['System.TeamProject'], 'public')) }}: + ${{ if and(in(parameters.osGroup, 'osx', 'maccatalyst', 'ios', 'iossimulator', 'tvos', 'tvossimulator'), not(in(parameters.jobParameters.hostedOs, 'linux', 'windows')), ne(variables['System.TeamProject'], 'public')) }}: name: "Azure Pipelines" vmImage: 'macos-latest-internal' os: macOS From 1964604bc1496d7101bbd498f5507c4cca37c9a4 Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Fri, 6 Mar 2026 15:23:06 -0800 Subject: [PATCH 5/5] Address review feedback: use -hc flag and create installer/run-test-job.yml - Replace separate 'Build host+packs' script steps with -hc flag in CoreCLR_Libraries buildArgs to produce a single build invocation - Create eng/pipelines/installer/run-test-job.yml as a dedicated test-only job template for installer Helix submissions - Remove skipBuild parameter from global-build-job.yml, restoring its original build-focused structure - Update Installer_Test jobs to use the new run-test-job.yml template - Fix condition blocks to use >- block scalar indicators consistently Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/common/global-build-job.yml | 46 +++++---- eng/pipelines/installer/run-test-job.yml | 81 ++++++++++++++++ eng/pipelines/runtime.yml | 112 ++++------------------ 3 files changed, 122 insertions(+), 117 deletions(-) create mode 100644 eng/pipelines/installer/run-test-job.yml diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml index 7a66a8cf8d44d9..6d35d58a675e1a 100644 --- a/eng/pipelines/common/global-build-job.yml +++ b/eng/pipelines/common/global-build-job.yml @@ -2,7 +2,6 @@ parameters: buildConfig: '' nameSuffix: '' buildArgs: '' - skipBuild: false archType: '' hostedOs: '' osGroup: '' @@ -215,31 +214,30 @@ jobs: - ${{ else }}: - ${{ preBuildStep }} - - ${{ if ne(parameters.skipBuild, true) }}: - # Build - - template: /eng/pipelines/common/templates/global-build-step.yml - parameters: - buildArgs: ${{ parameters.buildArgs }} - useContinueOnErrorDuringBuild: ${{ parameters.useContinueOnErrorDuringBuild }} - shouldContinueOnError: ${{ parameters.shouldContinueOnError }} - - - task: CopyFiles@2 - displayName: Gather CMakeConfigureLog for publish to artifacts - inputs: - SourceFolder: 'artifacts/obj' - Contents: '**/CMakeConfigureLog.yaml' - TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/log/cmake' - continueOnError: true + # Build + - template: /eng/pipelines/common/templates/global-build-step.yml + parameters: + buildArgs: ${{ parameters.buildArgs }} + useContinueOnErrorDuringBuild: ${{ parameters.useContinueOnErrorDuringBuild }} + shouldContinueOnError: ${{ parameters.shouldContinueOnError }} + + - task: CopyFiles@2 + displayName: Gather CMakeConfigureLog for publish to artifacts + inputs: + SourceFolder: 'artifacts/obj' + Contents: '**/CMakeConfigureLog.yaml' + TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/log/cmake' + continueOnError: true + condition: always() + + - ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos', 'android') }}: + - script: | + du -sh $(Build.SourcesDirectory)/* + df -h + displayName: Disk Usage after Build condition: always() - - ${{ if in(parameters.osGroup, 'osx', 'ios', 'tvos', 'android') }}: - - script: | - du -sh $(Build.SourcesDirectory)/* - df -h - displayName: Disk Usage after Build - condition: always() - - # If intended to send extra steps after regular build add them here. + # If intended to send extra steps after regular build add them here. - ${{ if ne(parameters.postBuildSteps,'') }}: - ${{ each postBuildStep in parameters.postBuildSteps }}: - ${{ if ne(postBuildStep.template, '') }}: diff --git a/eng/pipelines/installer/run-test-job.yml b/eng/pipelines/installer/run-test-job.yml new file mode 100644 index 00000000000000..bae83f5a3767cc --- /dev/null +++ b/eng/pipelines/installer/run-test-job.yml @@ -0,0 +1,81 @@ +parameters: + buildConfig: '' + osGroup: '' + osSubgroup: '' + archType: '' + targetRid: '' + hostedOs: '' + timeoutInMinutes: 150 + pool: '' + condition: true + shouldContinueOnError: false + variables: {} + dependsOn: [] + dependsOnGlobalBuilds: [] + helixQueues: [] + buildArtifactName: '' + testArtifactName: '' + templatePath: 'templates' + +jobs: + - template: /eng/common/${{ parameters.templatePath }}/job/job.yml + parameters: + enablePublishBuildArtifacts: true + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + condition: and(succeeded(), ${{ parameters.condition }}) + helixRepo: dotnet/runtime + displayName: ${{ format('Installer Test {0}{1} {2} {3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} + ${{ if eq(parameters.hostedOs, '') }}: + name: ${{ format('installer_test_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} + ${{ if ne(parameters.hostedOs, '') }}: + name: ${{ format('installer_test_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.hostedOs, parameters.buildConfig) }} + + pool: ${{ parameters.pool }} + + ${{ if eq(parameters.osSubGroup, '_musl') }}: + disableComponentGovernance: true + + dependsOn: + - ${{ each build in parameters.dependsOn }}: + - ${{ build }} + - ${{ each globalBuild in parameters.dependsOnGlobalBuilds }}: + - ${{ format('build_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, coalesce(globalBuild.buildConfig, parameters.buildConfig), globalBuild.nameSuffix) }} + + workspace: + clean: all + + variables: + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - group: DotNet-HelixApi-Access + - group: AzureDevOps-Artifact-Feeds-Pats + + - ${{ parameters.variables }} + + steps: + - checkout: self + clean: true + fetchDepth: $(checkoutFetchDepth) + fetchTags: false + + - template: /eng/common/${{ parameters.templatePath }}/steps/enable-internal-sources.yml + + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + unpackFolder: $(Build.SourcesDirectory)/artifacts/bin + artifactFileName: '${{ parameters.buildArtifactName }}$(archiveExtension)' + artifactName: '${{ parameters.buildArtifactName }}' + displayName: 'unified artifacts' + + - template: /eng/pipelines/common/download-artifact-step.yml + parameters: + unpackFolder: $(Build.SourcesDirectory)/artifacts/tests + artifactFileName: '${{ parameters.testArtifactName }}$(archiveExtension)' + artifactName: '${{ parameters.testArtifactName }}' + displayName: 'installer test artifacts' + + - template: /eng/pipelines/installer/helix.yml + parameters: + osGroup: ${{ parameters.osGroup }} + archType: ${{ parameters.archType }} + helixQueues: ${{ parameters.helixQueues }} + creator: dotnet-bot diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 31c57cb9beb6ba..1c316128365f2f 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -250,11 +250,9 @@ extends: - windows_x64 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+libs.tests -rc Release -c $(_BuildConfig) /p:ArchiveTests=true + buildArgs: -s clr+libs+libs.tests+host+packs -rc Release -c $(_BuildConfig) -hc Release /p:ArchiveTests=true timeoutInMinutes: 120 postBuildSteps: - - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) -s host+packs -c Release -lc $(_BuildConfig) -rc Release $(_officialBuildParameter) - displayName: Build host+packs - template: /eng/pipelines/common/upload-artifact-step.yml parameters: rootFolder: $(Build.SourcesDirectory)/artifacts/bin @@ -295,11 +293,9 @@ extends: - windows_x86 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true + buildArgs: -s clr+libs+libs.tests+host+packs -c $(_BuildConfig) -hc $(debugOnPrReleaseOnRolling) /p:ArchiveTests=true timeoutInMinutes: 120 postBuildSteps: - - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) -s host+packs -c $(debugOnPrReleaseOnRolling) -lc $(_BuildConfig) -rc $(_BuildConfig) $(_officialBuildParameter) - displayName: Build host+packs - template: /eng/pipelines/common/upload-artifact-step.yml parameters: rootFolder: $(Build.SourcesDirectory)/artifacts/bin @@ -344,11 +340,9 @@ extends: - osx_x64 jobParameters: nameSuffix: CoreCLR_Libraries - buildArgs: -s clr+libs -c $(_BuildConfig) + buildArgs: -s clr+libs+host+packs -c $(_BuildConfig) -hc $(debugOnPrReleaseOnRolling) timeoutInMinutes: 120 postBuildSteps: - - script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) -s host+packs -c $(debugOnPrReleaseOnRolling) -lc $(_BuildConfig) -rc $(_BuildConfig) $(_officialBuildParameter) - displayName: Build host+packs - template: /eng/pipelines/common/upload-artifact-step.yml parameters: rootFolder: $(Build.SourcesDirectory)/artifacts/bin @@ -1486,147 +1480,79 @@ extends: # - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml + jobTemplate: /eng/pipelines/installer/run-test-job.yml buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - windows_x86 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: - nameSuffix: Installer_Test - skipBuild: true dependsOnGlobalBuilds: - nameSuffix: CoreCLR_Libraries buildConfig: release - preBuildSteps: - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release - artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/bin - displayName: 'unified artifacts' - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release - artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/tests - displayName: 'installer test artifacts' + buildArtifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release + testArtifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release timeoutInMinutes: 150 - postBuildSteps: - - template: /eng/pipelines/installer/helix.yml - parameters: - creator: dotnet-bot - condition: + condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), eq(variables['isRollingBuild'], true)) - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml + jobTemplate: /eng/pipelines/installer/run-test-job.yml buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} platforms: - osx_x64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: - nameSuffix: Installer_Test - skipBuild: true hostedOs: linux dependsOnGlobalBuilds: - nameSuffix: CoreCLR_Libraries buildConfig: release - preBuildSteps: - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release - artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/bin - displayName: 'unified artifacts' - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release - artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/tests - displayName: 'installer test artifacts' + buildArtifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release + testArtifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Release timeoutInMinutes: 150 - postBuildSteps: - - template: /eng/pipelines/installer/helix.yml - parameters: - creator: dotnet-bot - condition: + condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), eq(variables['isRollingBuild'], true)) - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml + jobTemplate: /eng/pipelines/installer/run-test-job.yml buildConfig: release platforms: - windows_x64 - linux_x64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: - nameSuffix: Installer_Test - skipBuild: true dependsOnGlobalBuilds: - nameSuffix: CoreCLR_Libraries buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} - preBuildSteps: - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) - artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/bin - displayName: 'unified artifacts' - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) - artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/tests - displayName: 'installer test artifacts' + buildArtifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) + testArtifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) timeoutInMinutes: 150 - postBuildSteps: - - template: /eng/pipelines/installer/helix.yml - parameters: - creator: dotnet-bot - condition: + condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), eq(variables['isRollingBuild'], true)) - template: /eng/pipelines/common/platform-matrix.yml parameters: - jobTemplate: /eng/pipelines/common/global-build-job.yml + jobTemplate: /eng/pipelines/installer/run-test-job.yml buildConfig: release platforms: - osx_arm64 helixQueuesTemplate: /eng/pipelines/installer/helix-queues-setup.yml jobParameters: - nameSuffix: Installer_Test - skipBuild: true hostedOs: linux dependsOnGlobalBuilds: - nameSuffix: CoreCLR_Libraries buildConfig: ${{ variables.debugOnPrReleaseOnRolling }} - preBuildSteps: - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) - artifactFileName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/bin - displayName: 'unified artifacts' - - template: /eng/pipelines/common/download-artifact-step.yml - parameters: - artifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) - artifactFileName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)$(archiveExtension) - unpackFolder: $(Build.SourcesDirectory)/artifacts/tests - displayName: 'installer test artifacts' + buildArtifactName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) + testArtifactName: Installer_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling) timeoutInMinutes: 150 - postBuildSteps: - - template: /eng/pipelines/installer/helix.yml - parameters: - creator: dotnet-bot - condition: + condition: >- or( eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_non_mono_and_wasm.containsChange'], true), eq(variables['isRollingBuild'], true))