trigger: batch: true branches: include: - master - release/3.0 - internal/release/3.* pr: - master - release/3.0 - internal/release/3.* # Temporarily set a build number format that includes a large revision # number that won't conflict with buildpipeline official builds. name: $(Date:yyyyMMdd)$(Rev:.7r) variables: - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE value: true jobs: ## The following is the matrix of test runs that we have. This is ## duplicated for each os/arch combination in platform-matrix.yml. ## ## Product build Test build Test run ## (Azure DevOps) (Azure DevOps) (helix) ## ## ########################################################################################### ## ## Debug ## ## Checked ----------> Pri0 -----------------> plain runtests ## | ## \---------> Pri1 -----------------> plain runtests ## | \----------------> jitstress ## | \----------------> gcstress ## | \----------------> runincontext ## | \----------------> maybe more (dynamically selected runtest modes) ## | ## \---------> Pri1 crossgen --------> plain runtests ## \-------> jitstress ## \-------> gcstress ## \-------> maybe more (dynamically selected runtest modes) ## ## Release ----------> Pri1 -----------------> plain runtests ## | ## \---------> Pri1 crossgen --------> plain runtests ## ## ## Each build or test job is defined in Azure DevOps, and will show ## up in the UI in the order in which they are defined here. The ## build and test build job matrix is defined statically, but ## queue-time inputs can be used to control whether a job executes ## (used to select which jobs run in ci vs for official builds), or ## to select test modes. This should eventually be used to enable ## requesting specific test runs from pull requests. ## ## Templates used to define jobs: ## Please update this if the factoring changes. ## ## This file defines the set of jobs in a platform-agnostic manner, ## using the platform-matrix.yml template. This will create one job ## for each platform from the passed-in jobTemplate (either a build ## job or a test job). The build-job.yml and test-job.yml templates ## use xplat-job.yml to handle some of the common logic for ## abstracting over platforms. Finally, xplat-job.yml uses the arcade ## base.yml job template, which sets up telemetry and signing support. ## azure-pipelines.yml -> platform-matrix.yml -------> build-job.yml -------> xplat-job.yml -> base.yml ## | (passed-in jobTemplate) | (arcade) ## \------> test-job.yml ------/ ## \------> format-job.yml ----/ # TODO: simplify logic surrounding official build/ci. See # https://github.com/Microsoft/azure-pipelines-yaml/pull/46 for more information # # Debug builds # - ${{ if eq(variables['System.TeamProject'], 'public') }}: - template: eng/platform-matrix.yml parameters: jobTemplate: build-job.yml buildConfig: debug ${{ if and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Windows_NT_x64 - Windows_NT_x86 ${{ if and(in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_arm - Linux_arm64 - Linux_musl_arm64 - Linux_musl_x64 - Linux_rhel6_x64 - Linux_x64 - OSX_x64 - Windows_NT_arm - Windows_NT_arm64 # # Checked builds # - ${{ if eq(variables['System.TeamProject'], 'public') }}: - template: eng/platform-matrix.yml parameters: jobTemplate: build-job.yml buildConfig: checked ${{ if and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_arm - Linux_arm64 - Linux_musl_x64 - Linux_x64 - OSX_x64 - Windows_NT_arm - Windows_NT_arm64 - Windows_NT_x64 - Windows_NT_x86 ${{ if and(in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platformGroup: all ${{ if eq(variables['Build.DefinitionName'], 'coreclr-outerloop') }}: platformGroup: all # # Release builds # - ${{ if eq(variables['System.TeamProject'], 'public') }}: - template: eng/platform-matrix.yml parameters: jobTemplate: build-job.yml buildConfig: release ${{ if and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_arm64 - Linux_musl_x64 - Linux_rhel6_x64 - Windows_NT_arm - Windows_NT_arm64 - Windows_NT_x64 ${{ if and(in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_arm - Linux_musl_arm64 - Linux_x64 - OSX_x64 - Windows_NT_x86 - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - template: eng/platform-matrix.yml parameters: jobTemplate: build-job.yml buildConfig: release platformGroup: all jobParameters: # Publishing packages to blob feeds sometimes takes a long time # due to waiting for an exclusive lock on the feed. # See https://github.com/dotnet/arcade/blob/master/Documentation/CorePackages/AsyncPublishing.md timeoutInMinutes: 120 # # Checked test builds # # The test jobs that can be triggered by a PR, manually from ADO and that are scheduled - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest', 'Manual', 'Schedule')) }}: - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: checked ${{ if and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_arm - Linux_arm64 - Linux_musl_x64 - Linux_x64 - OSX_x64 - Windows_NT_arm - Windows_NT_arm64 - Windows_NT_x64 - Windows_NT_x86 helixQueueGroup: pr ${{ if eq(variables['Build.DefinitionName'], 'coreclr-outerloop') }}: platformGroup: all helixQueueGroup: all jobParameters: ${{ if eq(variables['Build.DefinitionName'], 'coreclr-ci') }}: testGroup: innerloop ${{ if eq(variables['Build.DefinitionName'], 'coreclr-outerloop') }}: testGroup: outerloop # ReadyToRun test jobs that are triggered by default from a PR. - ${{ if eq(variables['System.TeamProject'], 'public') }}: - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: checked ${{ if and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_x64 - OSX_x64 - Windows_NT_x64 - Windows_NT_x86 helixQueueGroup: pr jobParameters: ${{ if eq(variables['Build.DefinitionName'], 'coreclr-ci') }}: testGroup: innerloop readyToRun: true displayNameArgs: R2R # # CoreFX test runs against CoreCLR # - ${{ if eq(variables['System.TeamProject'], 'public') }}: - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: checked ${{ if and(eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: platforms: - Linux_x64 - Windows_NT_x64 helixQueueGroup: corefx jobParameters: ${{ if eq(variables['Build.DefinitionName'], 'coreclr-ci') }}: testGroup: innerloop corefxTests: true displayNameArgs: CoreFX # CI (merge) jobs - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: checked platformGroup: all helixQueueGroup: ci jobParameters: testGroup: outerloop - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: checked platforms: - Linux_arm64 - Linux_musl_x64 - Linux_musl_arm64 - Linux_rhel6_x64 - Linux_x64 - OSX_x64 - Windows_NT_x64 - Windows_NT_x86 - Windows_NT_arm - Windows_NT_arm64 helixQueueGroup: ci jobParameters: testGroup: outerloop readyToRun: true displayNameArgs: R2R # # Release test builds # # Pull-Request test - ${{ if and(eq(variables['System.TeamProject'], 'public'), eq(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: release platforms: - Linux_musl_x64 helixQueueGroup: pr jobParameters: testGroup: innerloop # Official test - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: release platformGroup: all helixQueueGroup: all jobParameters: testGroup: outerloop - template: eng/platform-matrix.yml parameters: jobTemplate: test-job.yml buildConfig: release platformGroup: all helixQueueGroup: all jobParameters: testGroup: outerloop readyToRun: true displayNameArgs: R2R # Format - ${{ if and(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI'), eq(variables['Build.DefinitionName'], 'coreclr-ci')) }}: - template: eng/platform-matrix.yml parameters: jobTemplate: format-job.yml platforms: - Linux_x64 - Windows_NT_x64 # Publish build information to Build Assets Registry # This job gathers build assets from the pipeline (from each official # product build job), and publishes them to the build assets # registry. Its dependencies should be updated to include all of the # official builds if we add more platform/arch combinations. - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}: - template: /eng/finalize-publish.yml parameters: dependsOn: - build_Linux_arm_release - build_Linux_arm64_release - build_Linux_musl_x64_release - build_Linux_musl_arm64_release - build_Linux_rhel6_x64_release - build_Linux_x64_release - build_OSX_x64_release - build_Windows_NT_x64_release - build_Windows_NT_x86_release - build_Windows_NT_arm_release - build_Windows_NT_arm64_release