From c797f90698c3dcf35ceefddbb0051dde09e3d1ef Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tom=C3=A1=C5=A1=20Rylek?= Date: Mon, 28 Oct 2019 15:07:42 -0700 Subject: [PATCH] CoreCLR pipeline optimizations (dotnet/coreclr#27059) Today, R2R compilation of test MSIL using Crossgen happens during test execution in Helix. This means that the managed artifacts for a given OS / architecture / config combo are identical for a R2R / non-R2R job. Additionally, we need very few artifacts for running the CoreFX tests. In practice it turns out we only need to build the test host. We can exploit these facts to further reduce the number of test build jobs in CoreCLR pipelines. Thanks Tomas Commit migrated from https://github.com/dotnet/coreclr/commit/446c6fe0bfae263bee0c3ace46a5b9a74015e4d1 --- eng/build-test-job.yml | 81 +----- eng/pipelines/coreclr/ci.yml | 24 +- eng/pipelines/coreclr/corefx-jitstress.yml | 2 +- .../coreclr/corefx-jitstress2-jitstressregs.yml | 2 +- eng/pipelines/coreclr/corefx-jitstressregs.yml | 2 +- eng/pipelines/coreclr/corefx.yml | 2 +- eng/pipelines/coreclr/gc-longrunning.yml | 15 +- eng/pipelines/coreclr/internal.yml | 30 ++- eng/pipelines/coreclr/jitstress-isas-x86.yml | 15 +- eng/pipelines/coreclr/jitstressregs.yml | 11 +- eng/pipelines/coreclr/pr.yml | 44 +++- eng/pipelines/coreclr/r2r-extra.yml | 2 +- eng/platform-matrix-combos.yml | 71 ------ eng/platform-matrix-managed-test-build.yml | 4 + eng/platform-matrix.yml | 284 +++++++++++++++++++-- eng/run-test-job.yml | 119 +++++---- eng/test-job.yml | 16 +- eng/xplat-test-job.yml | 15 +- src/coreclr/build-test.sh | 3 +- 19 files changed, 489 insertions(+), 253 deletions(-) delete mode 100644 eng/platform-matrix-combos.yml diff --git a/eng/build-test-job.yml b/eng/build-test-job.yml index 5ac775d..5b24f7f 100644 --- a/eng/build-test-job.yml +++ b/eng/build-test-job.yml @@ -5,10 +5,6 @@ parameters: osSubgroup: '' container: '' testGroup: '' - readyToRun: false - crossrootfsDir: '' - # If true, run the corefx tests instead of the coreclr ones - corefxTests: false displayNameArgs: '' condition: true stagedBuild: false @@ -32,8 +28,6 @@ jobs: managedTestBuildOsSubgroup: ${{ parameters.osSubgroup }} container: ${{ parameters.container }} testGroup: ${{ parameters.testGroup }} - readyToRun: ${{ parameters.readyToRun }} - corefxTests: ${{ parameters.corefxTests }} stagedBuild: ${{ parameters.stagedBuild }} # Test jobs should continue on error for internal builds @@ -41,53 +35,14 @@ jobs: continueOnError: true # Compute job name from template parameters - ${{ if and(eq(parameters.testGroup, 'innerloop'), eq(parameters.displayNameArgs, '')) }}: + ${{ if eq(parameters.testGroup, 'innerloop') }}: name: 'build_test_p0_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' displayName: 'Build Test Pri0 ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - ${{ if and(ne(parameters.testGroup, 'innerloop'), eq(parameters.displayNameArgs, '')) }}: + ${{ if ne(parameters.testGroup, 'innerloop') }}: name: 'build_test_p1_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' displayName: 'Build Test Pri1 ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - ${{ if and(eq(parameters.testGroup, 'innerloop'), ne(parameters.displayNameArgs, '')) }}: - name: 'build_test_p0_${{ parameters.displayNameArgs }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' - displayName: 'Build Test Pri0 ${{ parameters.displayNameArgs }} ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - - ${{ if and(ne(parameters.testGroup, 'innerloop'), ne(parameters.displayNameArgs, '')) }}: - name: 'build_test_p1_${{ parameters.displayNameArgs }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' - displayName: 'Build Test Pri1 ${{ parameters.displayNameArgs }} ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - - crossrootfsDir: ${{ parameters.crossrootfsDir }} - - variables: - # Map template parameters to command line arguments - - name: crossgenArg - value: '' - - ${{ if eq(parameters.readyToRun, true) }}: - - name: crossgenArg - value: 'crossgen' - - - name: clangArg - value: '-clang9' - # Our FreeBSD doesn't yet detect available clang versions, so pass it explicitly. - - ${{ if eq(parameters.osGroup, 'FreeBSD') }}: - - name: clangArg - value: '-clang6.0' - # Building for x64 MUSL happens on Alpine Linux and we need to use the stable version available there - - ${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.osSubgroup, '_musl'), eq(parameters.archType, 'x64')) }}: - - name: clangArg - value: '' - - - name: testhostArg - value: '' - - ${{ if eq(parameters.corefxTests, true) }}: - - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: - - name: testhostArg - value: 'generatetesthostonly' - - ${{ if eq(parameters.osGroup, 'Windows_NT') }}: - - name: testhostArg - value: 'buildtesthostonly' - # Since the condition is being altered, merge the default with the additional conditions. # See https://docs.microsoft.com/azure/devops/pipelines/process/conditions condition: and(succeeded(), ${{ parameters.condition }}) @@ -137,10 +92,10 @@ jobs: # Build managed test components - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: - - script: ./build-test.sh skipnative skipgeneratelayout $(buildConfig) $(archType) $(crossArg) $(priorityArg) $(crossgenArg) $(clangArg) $(testhostArg) ci + - script: ./build-test.sh skipnative skipgeneratelayout $(buildConfig) $(archType) $(crossArg) $(priorityArg) ci displayName: Build managed test components - ${{ if eq(parameters.osGroup, 'Windows_NT') }}: - - script: build-test.cmd skipnative skipgeneratelayout $(buildConfig) $(archType) $(priorityArg) $(crossgenArg) $(testhostArg) ci + - script: build-test.cmd skipnative skipgeneratelayout $(buildConfig) $(archType) $(priorityArg) ci displayName: Build managed test components @@ -158,16 +113,15 @@ jobs: # Publish .packages/microsoft.net.sdk.il needed for traversing # test projects during the copynativeonly command in run test job. - - ${{ if ne(parameters.corefxTests, true) }}: - - template: /eng/upload-artifact-step.yml - parameters: - rootFolder: $(microsoftNetSdkIlFolderPath) - includeRootFolder: false - archiveFile: $(Build.StagingDirectory)/$(microsoftNetSdkIlArtifactName)$(archiveExtension) - archiveType: $(archiveType) - tarCompression: $(tarCompression) - artifactName: $(microsoftNetSdkIlArtifactName) - displayName: 'Microsoft.NET.Sdk.IL package' + - template: /eng/upload-artifact-step.yml + parameters: + rootFolder: $(microsoftNetSdkIlFolderPath) + includeRootFolder: false + archiveFile: $(Build.StagingDirectory)/$(microsoftNetSdkIlArtifactName)$(archiveExtension) + archiveType: $(archiveType) + tarCompression: $(tarCompression) + artifactName: $(microsoftNetSdkIlArtifactName) + displayName: 'Microsoft.NET.Sdk.IL package' # Publish Logs @@ -175,13 +129,6 @@ jobs: displayName: Publish Logs inputs: pathtoPublish: $(Build.SourcesDirectory)/bin/Logs - ${{ if and(eq(parameters.corefxTests, true), eq(parameters.readyToRun, true)) }}: - artifactName: ${{ format('TestBuildLogs_r2r_corefx_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.testGroup) }} - ${{ if and(eq(parameters.corefxTests, true), ne(parameters.readyToRun, true)) }}: - artifactName: ${{ format('TestBuildLogs_corefx_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.testGroup) }} - ${{ if and(ne(parameters.corefxTests, true), eq(parameters.readyToRun, true)) }}: - artifactName: ${{ format('TestBuildLogs_r2r_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.testGroup) }} - ${{ if and(ne(parameters.corefxTests, true), ne(parameters.readyToRun, true)) }}: - artifactName: ${{ format('TestBuildLogs_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.testGroup) }} + artifactName: ${{ format('TestBuildLogs_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.testGroup) }} continueOnError: true condition: always() diff --git a/eng/pipelines/coreclr/ci.yml b/eng/pipelines/coreclr/ci.yml index 83c3a73..f415a39 100644 --- a/eng/pipelines/coreclr/ci.yml +++ b/eng/pipelines/coreclr/ci.yml @@ -61,7 +61,25 @@ jobs: # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml + buildConfig: checked + platforms: + - Linux_arm + - Linux_arm64 + - OSX_x64 + - Windows_NT_arm + - Windows_NT_arm64 + - Windows_NT_x64 + - Windows_NT_x86 + helixQueueGroup: ci + testGroup: outerloop + +# +# Checked JIT test runs +# +- template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml buildConfig: checked platformGroup: all helixQueueGroup: ci @@ -69,11 +87,11 @@ jobs: testGroup: outerloop # -# ReadyToRun test jobs +# Checked R2R test runs # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: - Linux_arm64 diff --git a/eng/pipelines/coreclr/corefx-jitstress.yml b/eng/pipelines/coreclr/corefx-jitstress.yml index c442549..5594b2d 100644 --- a/eng/pipelines/coreclr/corefx-jitstress.yml +++ b/eng/pipelines/coreclr/corefx-jitstress.yml @@ -33,7 +33,7 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: # TODO: add Windows_NT_arm64, when we have hardware available, and .NET Core supports it. Note: platform-matrix.yml needs to enable a Helix queue for this. diff --git a/eng/pipelines/coreclr/corefx-jitstress2-jitstressregs.yml b/eng/pipelines/coreclr/corefx-jitstress2-jitstressregs.yml index 40fb904..4aa014a 100644 --- a/eng/pipelines/coreclr/corefx-jitstress2-jitstressregs.yml +++ b/eng/pipelines/coreclr/corefx-jitstress2-jitstressregs.yml @@ -33,7 +33,7 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: # TODO: add Windows_NT_arm64, when we have hardware available, and .NET Core supports it. Note: platform-matrix.yml needs to enable a Helix queue for this. diff --git a/eng/pipelines/coreclr/corefx-jitstressregs.yml b/eng/pipelines/coreclr/corefx-jitstressregs.yml index a595255..8674396 100644 --- a/eng/pipelines/coreclr/corefx-jitstressregs.yml +++ b/eng/pipelines/coreclr/corefx-jitstressregs.yml @@ -33,7 +33,7 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: # TODO: add Windows_NT_arm64, when we have hardware available, and .NET Core supports it. Note: platform-matrix.yml needs to enable a Helix queue for this. diff --git a/eng/pipelines/coreclr/corefx.yml b/eng/pipelines/coreclr/corefx.yml index 0a34344..972085b 100644 --- a/eng/pipelines/coreclr/corefx.yml +++ b/eng/pipelines/coreclr/corefx.yml @@ -33,7 +33,7 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: # TODO: add Windows_NT_arm64, when we have hardware available, and .NET Core supports it. Note: platform-matrix.yml needs to enable a Helix queue for this. diff --git a/eng/pipelines/coreclr/gc-longrunning.yml b/eng/pipelines/coreclr/gc-longrunning.yml index af0a1dc..733b125 100644 --- a/eng/pipelines/coreclr/gc-longrunning.yml +++ b/eng/pipelines/coreclr/gc-longrunning.yml @@ -30,7 +30,20 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml + buildConfig: release + platforms: + - OSX_x64 + - Linux_arm64 + - Windows_NT_x64 + - Windows_NT_arm64 + helixQueueGroup: ci + jobParameters: + testGroup: gc-longrunning + +- template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml buildConfig: release platforms: - Linux_x64 diff --git a/eng/pipelines/coreclr/internal.yml b/eng/pipelines/coreclr/internal.yml index 718131d..fd11a77 100644 --- a/eng/pipelines/coreclr/internal.yml +++ b/eng/pipelines/coreclr/internal.yml @@ -93,9 +93,16 @@ stages: # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml buildConfig: release - platformGroup: all + platforms: + - Linux_arm + - Linux_arm64 + - OSX_x64 + - Windows_NT_arm + - Windows_NT_arm64 + - Windows_NT_x64 + - Windows_NT_x86 helixQueueGroup: all stagedBuild: true jobParameters: @@ -103,18 +110,31 @@ stages: condition: ne(variables['_BypassTesting'], 'true') # - # ReadyToRun test builds + # Release JIT test executions # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: release platformGroup: all helixQueueGroup: all stagedBuild: true jobParameters: testGroup: outerloop + condition: ne(variables['_BypassTesting'], 'true') + + # + # Release R2R test executions + # + - template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml + buildConfig: release + platformGroup: all + helixQueueGroup: all + stagedBuild: true + jobParameters: readyToRun: true displayNameArgs: R2R + testGroup: outerloop condition: ne(variables['_BypassTesting'], 'true') - \ No newline at end of file diff --git a/eng/pipelines/coreclr/jitstress-isas-x86.yml b/eng/pipelines/coreclr/jitstress-isas-x86.yml index 47d9d97..c5ced01 100644 --- a/eng/pipelines/coreclr/jitstress-isas-x86.yml +++ b/eng/pipelines/coreclr/jitstress-isas-x86.yml @@ -30,7 +30,20 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml + buildConfig: checked + platforms: + - Linux_x64 + - OSX_x64 + - Windows_NT_x64 + - Windows_NT_x86 + helixQueueGroup: ci + jobParameters: + testGroup: jitstress-isas-x86 + +- template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml buildConfig: checked platforms: - Linux_x64 diff --git a/eng/pipelines/coreclr/jitstressregs.yml b/eng/pipelines/coreclr/jitstressregs.yml index 6100a25..7dc84cd 100644 --- a/eng/pipelines/coreclr/jitstressregs.yml +++ b/eng/pipelines/coreclr/jitstressregs.yml @@ -26,7 +26,16 @@ jobs: - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml + buildConfig: checked + platformGroup: all + helixQueueGroup: ci + jobParameters: + testGroup: jitstressregs + +- template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml buildConfig: checked platformGroup: all helixQueueGroup: ci diff --git a/eng/pipelines/coreclr/pr.yml b/eng/pipelines/coreclr/pr.yml index baee188..9d2acda 100644 --- a/eng/pipelines/coreclr/pr.yml +++ b/eng/pipelines/coreclr/pr.yml @@ -57,6 +57,7 @@ jobs: - Linux_arm64 - Linux_musl_x64 - Linux_rhel6_x64 + - OSX_x64 - Windows_NT_arm - Windows_NT_arm64 - Windows_NT_x64 @@ -68,7 +69,26 @@ jobs: # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml + buildConfig: checked + platforms: + - Linux_arm + - Linux_arm64 + - OSX_x64 + - Windows_NT_arm + - Windows_NT_arm64 + - Windows_NT_x64 + - Windows_NT_x86 + helixQueueGroup: pr + jobParameters: + testGroup: innerloop + +# +# Checked JIT test executions +# +- template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml buildConfig: checked platforms: - Linux_arm @@ -85,11 +105,11 @@ jobs: testGroup: innerloop # -# ReadyToRun test jobs +# Checked R2R test executions # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: - Linux_x64 @@ -107,12 +127,13 @@ jobs: # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: run-test-job.yml buildConfig: checked platforms: - Linux_x64 - Windows_NT_x64 helixQueueGroup: pr + testGroup: innerloop jobParameters: testGroup: innerloop corefxTests: true @@ -134,7 +155,20 @@ jobs: # - template: /eng/platform-matrix.yml parameters: - jobTemplate: test-job.yml + jobTemplate: build-test-job.yml + buildConfig: release + platforms: + - OSX_x64 + helixQueueGroup: pr + jobParameters: + testGroup: innerloop + +# +# Release test builds +# +- template: /eng/platform-matrix.yml + parameters: + jobTemplate: run-test-job.yml buildConfig: release platforms: - Linux_musl_x64 diff --git a/eng/pipelines/coreclr/r2r-extra.yml b/eng/pipelines/coreclr/r2r-extra.yml index e9aa81a..bdb8c05 100644 --- a/eng/pipelines/coreclr/r2r-extra.yml +++ b/eng/pipelines/coreclr/r2r-extra.yml @@ -30,7 +30,7 @@ jobs: buildConfig: checked platformGroup: gcstress # r2r-extra testGroup runs gcstress15 scenario helixQueueGroup: ci + testGroup: r2r-extra jobParameters: - testGroup: r2r-extra readyToRun: true displayNameArgs: R2R diff --git a/eng/platform-matrix-combos.yml b/eng/platform-matrix-combos.yml deleted file mode 100644 index 57f0608..0000000 --- a/eng/platform-matrix-combos.yml +++ /dev/null @@ -1,71 +0,0 @@ -parameters: - jobTemplate: '' - buildConfig: '' - # helixQueueGroup is a named collection of Helix Queues. If specified, it determines which Helix queues are - # used, instead of the usual criteria. Allowed values: - # 'pr' - the queues used for a pull request for the platform. Typically a small set. - # 'ci' - the queues used for a CI (post-merge) test run. - # 'all' - the queues used for non-PR, non-CI test runs, e.g., Manual or Scheduled runs. Typically this is all available queues. - # 'corefx' - the queues used for a corefx test run. - helixQueueGroup: 'pr' - stagedBuild: false - jobParameters: {} - linuxArm: false - linuxArm64: false - linuxMuslX64: false - linuxMuslArm64: false - linuxRhel6X64: false - linuxX64: false - osxX64: false - windowsX64: false - windowsX86: false - windowsArm: false - windowsArm64: false - -jobs: -- template: /eng/platform-matrix-managed-test-build.yml - parameters: - jobTemplate: ${{ parameters.jobTemplate }} - buildConfig: ${{ parameters.buildConfig }} - helixQueueGroup: ${{ parameters.helixQueueGroup }} - stagedBuild: ${{ parameters.stagedBuild }} - jobParameters: ${{ parameters.jobParameters }} - - linuxArm: ${{ parameters.linuxArm }} - linuxArm64: ${{ parameters.linuxArm64 }} - linuxMuslX64: ${{ parameters.linuxMuslX64 }} - linuxMuslArm64: ${{ parameters.linuxMuslArm64 }} - linuxRhel6X64: ${{ parameters.linuxRhel6X64 }} - linuxX64: ${{ parameters.linuxX64 }} - osxX64: ${{ parameters.osxX64 }} - windowsX64: ${{ parameters.windowsX64 }} - windowsX86: ${{ parameters.windowsX86 }} - windowsArm: ${{ parameters.windowsArm }} - windowsArm64: ${{ parameters.windowsArm64 }} - - # Determine OS for building X86 managed test artifacts on *nix - # Currently no-op as we only run X86 tests on Windows - x86ManagedTestBuildOsGroup: '' - - # Determine OS for building X64 managed test artifacts on *nix - ${{ if eq(parameters.osxX64, true) }}: - x64ManagedTestBuildOsGroup: 'OSX' - ${{ if and(ne(parameters.osxX64, true), eq(parameters.linuxX64, true)) }}: - x64ManagedTestBuildOsGroup: 'Linux' - ${{ if and(ne(parameters.osxX64, true), ne(parameters.linuxX64, true), eq(parameters.linuxMuslX64, true)) }}: - x64ManagedTestBuildOsGroup: 'Linux' - x64ManagedTestBuildOsSubgroup: '_musl' - ${{ if and(ne(parameters.osxX64, true), ne(parameters.linuxX64, true), ne(parameters.linuxMuslX64, true), eq(parameters.linuxRhel6X64, true)) }}: - x64ManagedTestBuildOsGroup: 'Linux' - x64ManagedTestBuildOsSubgroup: '_rhel6' - - # Determine OS for building ARM managed test artifacts on *nix - ${{ if eq(parameters.linuxArm, true) }}: - armManagedTestBuildOsGroup: 'Linux' - - # Determine OS for building ARM64 managed test artifacts on *nix - ${{ if eq(parameters.linuxArm64, true) }}: - arm64ManagedTestBuildOsGroup: 'Linux' - ${{ if and(ne(parameters.linuxArm64, true), eq(parameters.linuxMuslArm64, true)) }}: - arm64ManagedTestBuildOsGroup: 'Linux' - arm64ManagedTestBuildOsSubroup: '_musl' diff --git a/eng/platform-matrix-managed-test-build.yml b/eng/platform-matrix-managed-test-build.yml index 505b8b8..bf7a3f6 100644 --- a/eng/platform-matrix-managed-test-build.yml +++ b/eng/platform-matrix-managed-test-build.yml @@ -229,6 +229,7 @@ jobs: buildConfig: ${{ parameters.buildConfig }} archType: x64 osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT helixQueues: - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: - Windows.10.Amd64.Open @@ -254,6 +255,7 @@ jobs: buildConfig: ${{ parameters.buildConfig }} archType: x86 osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT helixQueues: - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: - Windows.10.Amd64.Open @@ -277,6 +279,7 @@ jobs: buildConfig: ${{ parameters.buildConfig }} archType: arm osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT helixQueues: # NOTE: there are no queues specified for Windows_NT_arm public with helixQueueGroup='pr'. This means that specifying # Windows_NT_arm for a PR job causes a build, but no test run. If the test build and test runs were separate jobs, @@ -296,6 +299,7 @@ jobs: buildConfig: ${{ parameters.buildConfig }} archType: arm64 osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT helixQueues: # TODO: Consider adding Windows.10.Arm64.Open here if capacity is enough for handling both Windows_NT/arm and Windows_NT/arm64 testing - ${{ if eq(variables['System.TeamProject'], 'internal') }}: diff --git a/eng/platform-matrix.yml b/eng/platform-matrix.yml index 3d715ed..1e0c8b6 100644 --- a/eng/platform-matrix.yml +++ b/eng/platform-matrix.yml @@ -17,22 +17,268 @@ parameters: jobParameters: {} jobs: -- template: /eng/platform-matrix-combos.yml - parameters: - jobTemplate: ${{ parameters.jobTemplate }} - buildConfig: ${{ parameters.buildConfig }} - helixQueueGroup: ${{ parameters.helixQueueGroup }} - stagedBuild: ${{ parameters.stagedBuild }} - jobParameters: ${{ parameters.jobParameters }} - - linuxArm: ${{ or(containsValue(parameters.platforms, 'Linux_arm'), in(parameters.platformGroup, 'all', 'gcstress')) }} - linuxArm64: ${{ or(containsValue(parameters.platforms, 'Linux_arm64'), in(parameters.platformGroup, 'all', 'gcstress')) }} - linuxMuslX64: ${{ or(containsValue(parameters.platforms, 'Linux_musl_x64'), eq(parameters.platformGroup, 'all')) }} - linuxMuslArm64: ${{ or(containsValue(parameters.platforms, 'Linux_musl_arm64'), eq(parameters.platformGroup, 'all')) }} - linuxRhel6X64: ${{ or(containsValue(parameters.platforms, 'Linux_rhel6_x64'), eq(parameters.platformGroup, 'all')) }} - linuxX64: ${{ or(containsValue(parameters.platforms, 'Linux_x64'), in(parameters.platformGroup, 'all', 'gcstress')) }} - osxX64: ${{ or(containsValue(parameters.platforms, 'OSX_x64'), eq(parameters.platformGroup, 'all')) }} - windowsX64: ${{ or(containsValue(parameters.platforms, 'Windows_NT_x64'), in(parameters.platformGroup, 'all', 'gcstress')) }} - windowsX86: ${{ or(containsValue(parameters.platforms, 'Windows_NT_x86'), in(parameters.platformGroup, 'all', 'gcstress')) }} - windowsArm: ${{ or(containsValue(parameters.platforms, 'Windows_NT_arm'), eq(parameters.platformGroup, 'all')) }} - windowsArm64: ${{ or(containsValue(parameters.platforms, 'Windows_NT_arm64'), eq(parameters.platformGroup, 'all')) }} + +# Linux arm + +- ${{ if or(containsValue(parameters.platforms, 'Linux_arm'), in(parameters.platformGroup, 'all', 'gcstress')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: arm + osGroup: Linux + managedTestBuildOsGroup: Linux + container: + image: ubuntu-16.04-cross-14.04-23cacb0-20191023143847 + registry: mcr + helixQueues: + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - (Ubuntu.1804.Arm32.Open)Ubuntu.1804.Armarch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm32v7-30f6673-20190814153226 + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - (Debian.9.Arm32)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm32v7-74c9941-20190620155841 + - (Ubuntu.1804.Arm32)Ubuntu.1804.Armarch@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm32v7-30f6673-20190814153226 + crossrootfsDir: '/crossrootfs/arm' + ${{ insert }}: ${{ parameters.jobParameters }} + +# Linux arm64 + +- ${{ if or(containsValue(parameters.platforms, 'Linux_arm64'), in(parameters.platformGroup, 'all', 'gcstress')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: arm64 + osGroup: Linux + managedTestBuildOsGroup: Linux + container: + image: ubuntu-16.04-cross-arm64-cfdd435-20191023143847 + registry: mcr + helixQueues: + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - (Ubuntu.1804.Arm64.Open)Ubuntu.1604.Arm64.Docker.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm64v8-a45aeeb-20190620155855 + - ${{ if and(eq(variables['System.TeamProject'], 'public'), notIn(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - (Debian.9.Arm64.Open)Ubuntu.1604.Arm64.Docker.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-74c9941-20190620155840 + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - (Debian.9.Arm64)Ubuntu.1604.Arm64.Docker@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm64v8-74c9941-20190620155840 + - (Ubuntu.1804.Arm64)Ubuntu.1604.Arm64.Docker@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm64v8-a45aeeb-20190620155855 + crossrootfsDir: '/crossrootfs/arm64' + ${{ insert }}: ${{ parameters.jobParameters }} + +# Linux musl x64 + +- ${{ if or(containsValue(parameters.platforms, 'Linux_musl_x64'), eq(parameters.platformGroup, 'all')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: x64 + osGroup: Linux + osSubgroup: _musl + managedTestBuildOsGroup: OSX + container: + image: alpine-3.9-WithNode-0fc54a3-20190918214015 + registry: mcr + helixQueues: + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - (Alpine.310.Amd64.Open)Ubuntu.1604.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.10-helix-3043688-20190918214010 + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - (Alpine.38.Amd64)ubuntu.1604.amd64@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-09ca40b-20190508143246 + - (Alpine.39.Amd64)ubuntu.1604.amd64@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.9-helix-09ca40b-20190508143246 + - (Alpine.310.Amd64)ubuntu.1604.amd64@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.10-helix-3043688-20190918214010 + ${{ insert }}: ${{ parameters.jobParameters }} + +# Linux musl arm64 + +- ${{ if or(containsValue(parameters.platforms, 'Linux_musl_arm64'), eq(parameters.platformGroup, 'all')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: arm64 + osGroup: Linux + osSubgroup: _musl + managedTestBuildOsGroup: Linux + container: + image: ubuntu-16.04-cross-arm64-alpine-406629a-20191023143847 + registry: mcr + helixQueues: + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - (Alpine.38.Arm64.Open)Ubuntu.1604.Arm64.Docker.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-arm64v8-a45aeeb-20190620184035 + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - (Alpine.38.Arm64)Ubuntu.1604.Arm64.Docker@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-arm64v8-a45aeeb-20190620184035 + crossrootfsDir: '/crossrootfs/arm64' + ${{ insert }}: ${{ parameters.jobParameters }} + +# Linux rhel6 x64 + +- ${{ if or(containsValue(parameters.platforms, 'Linux_rhel6_x64'), eq(parameters.platformGroup, 'all')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: x64 + osGroup: Linux + osSubgroup: _rhel6 + managedTestBuildOsGroup: OSX + container: + image: centos-6-f39df28-20191023143802 + registry: mcr + helixQueues: + # TODO: enable RedHat.6.Amd64.Open once https://github.com/dotnet/coreclr/issues/23580 is resolved + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - RedHat.6.Amd64 + ${{ insert }}: ${{ parameters.jobParameters }} + +# Linux x64 + +- ${{ if or(containsValue(parameters.platforms, 'Linux_x64'), in(parameters.platformGroup, 'all', 'gcstress')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: x64 + osGroup: Linux + managedTestBuildOsGroup: OSX + container: + image: centos-7-f39df28-20191023143754 + registry: mcr + helixQueues: + - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - Ubuntu.1804.Amd64.Open + - ${{ if and(eq(variables['System.TeamProject'], 'public'), notIn(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - Debian.9.Amd64.Open + - Ubuntu.1604.Amd64.Open + - Ubuntu.1804.Amd64.Open + - Centos.7.Amd64.Open + - RedHat.7.Amd64.Open + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - Debian.9.Amd64 + - Ubuntu.1604.Amd64 + - Ubuntu.1804.Amd64 + - Centos.7.Amd64 + - (Fedora.28.Amd64)Ubuntu.1604.amd64@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-28-helix-09ca40b-20190508143249 + - RedHat.7.Amd64 + ${{ insert }}: ${{ parameters.jobParameters }} + +# FreeBSD + +# FreeBSD machines are currenrly offline. Re-enable in the official build when +# the machines are healthy. + +# - template: ${{ parameters.jobTemplate }} +# parameters: +# buildConfig: ${{ parameters.buildConfig }} +# archType: x64 +# osGroup: FreeBSD +# # There are no FreeBSD helix queues, so we don't run tests at the moment. +# helixQueues: +# asString: '' +# asArray: [] +# ${{ insert }}: ${{ parameters.jobParameters }} + +# macOS x64 + +- ${{ if or(containsValue(parameters.platforms, 'OSX_x64'), eq(parameters.platformGroup, 'all')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: x64 + osGroup: OSX + managedTestBuildOsGroup: OSX + helixQueues: + - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - OSX.1013.Amd64.Open + - ${{ if and(eq(variables['System.TeamProject'], 'public'), notIn(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - OSX.1013.Amd64.Open + - OSX.1014.Amd64.Open + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - OSX.1013.Amd64 + - OSX.1014.Amd64 + ${{ insert }}: ${{ parameters.jobParameters }} + +# Windows x64 + +- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_x64'), in(parameters.platformGroup, 'all', 'gcstress')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: x64 + osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT + helixQueues: + - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - Windows.10.Amd64.Open + - ${{ if and(eq(variables['System.TeamProject'], 'public'), notIn(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + # TODO: add Windows.10.Nano.Amd64.Open once https://github.com/dotnet/coreclr/issues/21693 has been resolved + - Windows.7.Amd64.Open + - Windows.81.Amd64.Open + - Windows.10.Amd64.Open + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - Windows.7.Amd64 + - Windows.81.Amd64 + - Windows.10.Amd64 + - Windows.10.Amd64.Core + - (Windows.Nano.1803.Amd64)windows.10.amd64.serverrs4@mcr.microsoft.com/dotnet-buildtools/prereqs:nanoserver-1803-helix-amd64-05227e1-20190509225944 + ${{ insert }}: ${{ parameters.jobParameters }} + +# Windows x86 + +- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_x86'), in(parameters.platformGroup, 'all', 'gcstress')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: x86 + osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT + helixQueues: + - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - Windows.10.Amd64.Open + - ${{ if and(eq(variables['System.TeamProject'], 'public'), notIn(parameters.helixQueueGroup, 'pr', 'ci', 'corefx')) }}: + - Windows.7.Amd64.Open + - Windows.81.Amd64.Open + - Windows.10.Amd64.Open + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - Windows.7.Amd64 + - Windows.81.Amd64 + - Windows.10.Amd64 + - Windows.10.Amd64.Core + ${{ insert }}: ${{ parameters.jobParameters }} + +# Windows arm + +- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_arm'), eq(parameters.platformGroup, 'all')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: arm + osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT + helixQueues: + # NOTE: there are no queues specified for Windows_NT_arm public with helixQueueGroup='pr'. This means that specifying + # Windows_NT_arm for a PR job causes a build, but no test run. If the test build and test runs were separate jobs, + # this could be more explicit (and less subtle). + - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(parameters.helixQueueGroup, 'ci', 'corefx')) }}: + - Windows.10.Arm64.Open + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - Windows.10.Arm64 + ${{ insert }}: ${{ parameters.jobParameters }} + +# Windows arm64 + +- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_arm64'), eq(parameters.platformGroup, 'all')) }}: + - template: ${{ parameters.jobTemplate }} + parameters: + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + archType: arm64 + osGroup: Windows_NT + managedTestBuildOsGroup: Windows_NT + helixQueues: + # TODO: Consider adding Windows.10.Arm64.Open here if capacity is enough for handling both Windows_NT/arm and Windows_NT/arm64 testing + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - Windows.10.Arm64 + ${{ insert }}: ${{ parameters.jobParameters }} diff --git a/eng/run-test-job.yml b/eng/run-test-job.yml index 8061101..7f02ed1 100644 --- a/eng/run-test-job.yml +++ b/eng/run-test-job.yml @@ -7,6 +7,7 @@ parameters: managedTestBuildOsSubgroup: '' container: '' testGroup: '' + crossrootfsDir: '' readyToRun: false helixQueues: '' # If true, run the corefx tests instead of the coreclr ones @@ -31,7 +32,7 @@ jobs: managedTestBuildOsSubgroup: ${{ parameters.managedTestBuildOsSubgroup }} container: ${{ parameters.container }} testGroup: ${{ parameters.testGroup }} - readyToRun: ${{ parameters.readyToRun }} + crossrootfsDir: ${{ parameters.crossrootfsDir }} corefxTests: ${{ parameters.corefxTests }} stagedBuild: ${{ parameters.stagedBuild }} helixType: 'build/tests/' @@ -40,40 +41,37 @@ jobs: ${{ if eq(variables['System.TeamProject'], 'internal') }}: continueOnError: true + dependsOn: + - ${{ if ne(parameters.corefxTests, true) }}: + - ${{ if eq(parameters.testGroup, 'innerloop') }}: + - 'build_test_p0_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_${{ parameters.archType }}_${{parameters.buildConfig }}' + - ${{ if ne(parameters.testGroup, 'innerloop') }}: + - 'build_test_p1_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_${{ parameters.archType }}_${{parameters.buildConfig }}' + - ${{ if ne(parameters.stagedBuild, true) }}: + - ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} + # Compute job name from template parameters - ${{ if and(eq(parameters.testGroup, 'innerloop'), eq(parameters.displayNameArgs, '')) }}: - name: 'run_test_p0_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' - dependsOn: - - 'build_test_p0_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_${{ parameters.archType }}_${{parameters.buildConfig }}' - - ${{ if ne(parameters.stagedBuild, true) }}: - - ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} - displayName: 'Run Test Pri0 ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - - ${{ if and(ne(parameters.testGroup, 'innerloop'), eq(parameters.displayNameArgs, '')) }}: - name: 'run_test_p1_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' - dependsOn: - - 'build_test_p1_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_${{ parameters.archType }}_${{parameters.buildConfig }}' - - ${{ if ne(parameters.stagedBuild, true) }}: - - ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} - displayName: 'Run Test Pri1 ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - - ${{ if and(eq(parameters.testGroup, 'innerloop'), ne(parameters.displayNameArgs, '')) }}: + ${{ if eq(parameters.testGroup, 'innerloop') }}: name: 'run_test_p0_${{ parameters.displayNameArgs }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' - dependsOn: - - 'build_test_p0_${{ parameters.displayNameArgs }}_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_${{ parameters.archType }}_${{parameters.buildConfig }}' - - ${{ if ne(parameters.stagedBuild, true) }}: - - ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} displayName: 'Run Test Pri0 ${{ parameters.displayNameArgs }} ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' - ${{ if and(ne(parameters.testGroup, 'innerloop'), ne(parameters.displayNameArgs, '')) }}: + ${{ if ne(parameters.testGroup, 'innerloop') }}: name: 'run_test_p1_${{ parameters.displayNameArgs }}_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_${{ parameters.buildConfig }}' - dependsOn: - - 'build_test_p1_${{ parameters.displayNameArgs }}_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_${{ parameters.archType }}_${{parameters.buildConfig }}' - - ${{ if ne(parameters.stagedBuild, true) }}: - - ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }} displayName: 'Run Test Pri1 ${{ parameters.displayNameArgs }} ${{ parameters.osGroup }}${{ parameters.osSubgroup }} ${{ parameters.archType }} ${{ parameters.buildConfig }}' variables: + - name: testhostArg + value: 'generatetesthostonly' + - ${{ if eq(parameters.osGroup, 'Windows_NT') }}: + - name: testhostArg + value: 'buildtesthostonly' + + - name: crossgenArg + value: '' + - ${{ if eq(parameters.readyToRun, true) }}: + - name: crossgenArg + value: 'crossgen' + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - group: DotNet-HelixApi-Access @@ -92,24 +90,26 @@ jobs: steps: # Download and unzip managed test artifacts - - template: /eng/download-artifact-step.yml - parameters: - downloadFolder: '$(binTestsPath)/tmp' - unpackFolder: '$(testRootFolderPath)' - artifactFileName: '$(testArtifactName)$(archiveExtension)' - artifactName: '$(testArtifactName)' - displayName: 'managed test artifacts (built on ${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }})' + - ${{ if ne(parameters.corefxTests, true) }}: + - template: /eng/download-artifact-step.yml + parameters: + downloadFolder: '$(binTestsPath)/tmp' + unpackFolder: '$(testRootFolderPath)' + artifactFileName: '$(testArtifactName)$(archiveExtension)' + artifactName: '$(testArtifactName)' + displayName: 'managed test artifacts (built on ${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }})' # Download and unzip test build tree - - template: /eng/download-artifact-step.yml - parameters: - downloadFolder: '$(binTestsPath)/tmp' - unpackFolder: '$(testBuildRootFolderPath)' - cleanUnpackFolder: false - artifactFileName: '$(testBuildArtifactName)$(archiveExtension)' - artifactName: '$(testBuildArtifactName)' - displayName: 'test build tree' + - ${{ if ne(parameters.corefxTests, true) }}: + - template: /eng/download-artifact-step.yml + parameters: + downloadFolder: '$(binTestsPath)/tmp' + unpackFolder: '$(testBuildRootFolderPath)' + cleanUnpackFolder: false + artifactFileName: '$(testBuildArtifactName)$(archiveExtension)' + artifactName: '$(testBuildArtifactName)' + displayName: 'test build tree' # Download product binaries directory @@ -144,13 +144,14 @@ jobs: # Download and unzip native test artifacts - - template: /eng/download-artifact-step.yml - parameters: - downloadFolder: '$(binTestsPath)/tmp' - unpackFolder: '$(testNativeRootFolderPath)' - artifactFileName: '$(testNativeArtifactName)$(archiveExtension)' - artifactName: '$(testNativeArtifactName)' - displayName: 'native test artifacts' + - ${{ if ne(parameters.corefxTests, true) }}: + - template: /eng/download-artifact-step.yml + parameters: + downloadFolder: '$(binTestsPath)/tmp' + unpackFolder: '$(testNativeRootFolderPath)' + artifactFileName: '$(testNativeArtifactName)$(archiveExtension)' + artifactName: '$(testNativeArtifactName)' + displayName: 'native test artifacts' # Publish native test components to test output folder. Sadly we cannot do this @@ -167,6 +168,26 @@ jobs: displayName: Copy native test components to test output folder + # Generate test host + - ${{ if eq(parameters.corefxTests, true) }}: + - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: + - script: ./build-test.sh skipmanaged skipnative $(testhostArg) $(buildConfig) $(archType) $(crossArg) $(priorityArg) + displayName: Generate test host + - ${{ if eq(parameters.osGroup, 'Windows_NT') }}: + - script: build-test.cmd skipmanaged skipnative $(testhostArg) $(buildConfig) $(archType) $(priorityArg) + displayName: Generate test host + + + # Crossgen framework assemblies prior to triggering readyToRun execution runs. + - ${{ if eq(parameters.readyToRun, true) }}: + - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: + - script: ./build-test.sh skipmanaged skipnative $(crossgenArg) $(buildConfig) $(archType) $(crossArg) $(priorityArg) + displayName: Crossgen framework assemblies + - ${{ if eq(parameters.osGroup, 'Windows_NT') }}: + - script: build-test.cmd skipmanaged skipnative $(crossgenArg) $(buildConfig) $(archType) $(priorityArg) + displayName: Crossgen framework assemblies + + # Send tests to Helix - template: /eng/send-to-helix-step.yml parameters: diff --git a/eng/test-job.yml b/eng/test-job.yml index d100a96..f10cc07 100644 --- a/eng/test-job.yml +++ b/eng/test-job.yml @@ -23,21 +23,15 @@ parameters: ### buildConfig and archType. jobs: -- ${{ if and(eq(parameters.osSubgroup, parameters.managedTestBuildOsSubgroup), or(eq(parameters.osGroup, parameters.managedTestBuildOsGroup), eq(parameters.managedTestBuildOsGroup, ''))) }}: +- ${{ if and(ne(parameters.corefxTests, true), eq(parameters.osSubgroup, parameters.managedTestBuildOsSubgroup), eq(parameters.osGroup, parameters.managedTestBuildOsGroup)) }}: - template: build-test-job.yml parameters: buildConfig: ${{ parameters.buildConfig }} archType: ${{ parameters.archType }} - ${{ if ne(parameters.managedTestBuildOsGroup, '') }}: - osGroup: ${{ parameters.managedTestBuildOsGroup }} - ${{ if eq(parameters.managedTestBuildOsGroup, '') }}: - osGroup: ${{ parameters.osGroup }} + osGroup: ${{ parameters.managedTestBuildOsGroup }} osSubgroup: ${{ parameters.managedTestBuildOsSubgroup }} container: ${{ parameters.container }} testGroup: ${{ parameters.testGroup }} - readyToRun: ${{ parameters.readyToRun }} - crossrootfsDir: ${{ parameters.crossrootfsDir }} - corefxTests: ${{ parameters.coreFxTests }} displayNameArgs: ${{ parameters.displayNameArgs }} condition: ${{ parameters.condition }} stagedBuild: ${{ parameters.stagedBuild }} @@ -48,13 +42,11 @@ jobs: archType: ${{ parameters.archType }} osGroup: ${{ parameters.osGroup }} osSubgroup: ${{ parameters.osSubgroup }} - ${{ if ne(parameters.managedTestBuildOsGroup, '') }}: - managedTestBuildOsGroup: ${{ parameters.managedTestBuildOsGroup }} - ${{ if eq(parameters.managedTestBuildOsGroup, '') }}: - managedTestBuildOsGroup: ${{ parameters.osGroup }} + managedTestBuildOsGroup: ${{ parameters.managedTestBuildOsGroup }} managedTestBuildOsSubgroup: ${{ parameters.managedTestBuildOsSubgroup }} container: ${{ parameters.container }} testGroup: ${{ parameters.testGroup }} + crossrootfsDir: ${{ parameters.crossrootfsDir }} readyToRun: ${{ parameters.readyToRun }} helixQueues: ${{ parameters.helixQueues }} corefxTests: ${{ parameters.coreFxTests }} diff --git a/eng/xplat-test-job.yml b/eng/xplat-test-job.yml index 15add4b..abe06579 100644 --- a/eng/xplat-test-job.yml +++ b/eng/xplat-test-job.yml @@ -11,7 +11,6 @@ parameters: testGroup: '' crossrootfsDir: '' corefxTests: false - readyToRun: false stagedBuild: false # arcade-specific parameters @@ -65,18 +64,8 @@ jobs: - name: nativeRootFolderPath value: $(binTestsPath)/$(osGroup).$(archType).$(buildConfigUpper) - - ${{ if and(eq(parameters.corefxTests, true), eq(parameters.readyToRun, true)) }}: - - name: testArtifactName - value: Tests_r2r_corefx_$(testArtifactRootName) - - ${{ if and(eq(parameters.corefxTests, true), ne(parameters.readyToRun, true)) }}: - - name: testArtifactName - value: Tests_corefx_$(testArtifactRootName) - - ${{ if and(ne(parameters.corefxTests, true), eq(parameters.readyToRun, true)) }}: - - name: testArtifactName - value: Tests_r2r_$(testArtifactRootName) - - ${{ if and(ne(parameters.corefxTests, true), ne(parameters.readyToRun, true)) }}: - - name: testArtifactName - value: Tests_$(testArtifactRootName) + - name: testArtifactName + value: Tests_${{ parameters.managedTestBuildOsGroup }}${{ parameters.managedTestBuildOsSubgroup }}_$(archType)_$(buildConfig) - name: testNativeArtifactName value: 'NativeTestComponents_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)' diff --git a/src/coreclr/build-test.sh b/src/coreclr/build-test.sh index cbf4bfe..40c80bc 100755 --- a/src/coreclr/build-test.sh +++ b/src/coreclr/build-test.sh @@ -177,10 +177,11 @@ precompile_coreroot_fx() # Read the exclusion file for this platform skipCrossGenFiles=($(read_array "$(dirname "$0")/tests/skipCrossGenFiles.${__BuildArch}.txt")) + skipCrossGenFiles+=('System.Runtime.WindowsRuntime.dll') local overlayDir=$CORE_ROOT - filesToPrecompile=$(find -L $overlayDir -iname \*.dll -not -iname \*.ni.dll -not -iname \*-ms-win-\* -not -iname xunit.\* -type f -maxdepth 0) + filesToPrecompile=$(find -L $overlayDir -maxdepth 1 -iname \*.dll -not -iname \*.ni.dll -not -iname \*-ms-win-\* -not -iname xunit.\* -type f) for fileToPrecompile in ${filesToPrecompile} do local filename=${fileToPrecompile} -- 2.7.4