timeoutInMinutes: ''
signBinaries: false
publishToBlobFeed: false
+ stagedBuild: false
### Product build
jobs:
osSubgroup: ${{ parameters.osSubgroup }}
helixType: 'build/product/'
enableMicrobuild: true
+ stagedBuild: ${{ parameters.stagedBuild }}
# Compute job name from template parameters
name: ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
corefxTests: false
displayNameArgs: ''
condition: true
- ignoreDependencyOnBuildJobs: false
+ stagedBuild: false
### Test build job
osSubgroup: ${{ parameters.osSubgroup }}
readyToRun: ${{ parameters.readyToRun }}
corefxTests: ${{ parameters.corefxTests }}
+ stagedBuild: ${{ parameters.stagedBuild }}
# Test jobs should continue on error for internal builds
${{ if eq(variables['System.TeamProject'], 'internal') }}:
condition: and(succeeded(), ${{ parameters.condition }})
# Test job depends on the corresponding build job
- ${{ if ne(parameters.ignoreDependencyOnBuildJobs, true) }}:
+ ${{ if ne(parameters.stagedBuild, true) }}:
dependsOn: ${{ format('build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
# Run all steps in the container.
--- /dev/null
+### Check out job pulls down the GIT repository and packs its contents
+### into an Azure artifact for reuse by the subsequent build and test execution phases.
+### We're using two separate jobs for Windows and all other platforms due to the need
+### to use different compression formats (Windows doesn't support tar.gz and the Linux
+### and OSX build clients don't have 7-zip installed) and simplify other details such
+### as line endings.
+jobs:
+- job: 'checkout_windows'
+ displayName: 'Checkout (Windows)'
+
+ pool:
+ # Public Windows Build Pool
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ vmImage: 'windows-latest'
+
+ # Private Windows Build Pool
+ ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ name: NetCoreInternal-Pool
+ queue: BuildPool.Windows.10.Amd64.VS2017
+
+ steps:
+ - checkout: self
+ clean: true
+ fetchDepth: 1
+
+ ### Zip up downloaded repo and publish to Helix
+ - template: /eng/upload-artifact-step.yml
+ parameters:
+ displayName: 'GIT repository (Windows)'
+ rootFolder: $(Build.SourcesDirectory)
+ includeRootFolder: false
+ archiveFile: $(Build.StagingDirectory)/repo_windows.zip
+ archiveType: 'zip'
+ tarCompression: ''
+ artifactName: repo_windows
+
+- job: 'checkout_unix'
+ displayName: 'Checkout (Unix)'
+
+ pool:
+ # Public Linux Build Pool
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ vmImage: 'ubuntu-latest'
+
+ # Private Linux Build Pool
+ ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ name: NetCoreInternal-Pool
+ queue: BuildPool.Ubuntu.1604.Amd64
+
+ steps:
+ - checkout: self
+ clean: true
+ fetchDepth: 1
+
+ ### Zip up downloaded repo and publish to Helix
+ - template: /eng/upload-artifact-step.yml
+ parameters:
+ displayName: 'GIT repository (Unix)'
+ rootFolder: $(Build.SourcesDirectory)
+ includeRootFolder: false
+ archiveFile: $(Build.StagingDirectory)/repo_unix.tar.gz
+ archiveType: 'tar'
+ tarCompression: 'gz'
+ artifactName: repo_unix
container: ''
helixQueues: ''
crossrootfsDir: ''
+ stagedBuild: false
### Crossgen-comparison job
###
archType: ${{ parameters.archType }}
osGroup: ${{ parameters.osGroup }}
osSubgroup: ${{ parameters.osSubgroup }}
+ stagedBuild: ${{ parameters.stagedBuild }}
helixType: 'test/crossgen-comparison/'
# Compute job name from template parameters
parameters:
downloadFolder: ''
unpackFolder: ''
+ cleanUnpackFolder: true
artifactFileName: ''
artifactName: ''
+ displayName: ''
steps:
# Download artifact
- task: DownloadBuildArtifacts@0
- displayName: Download artifacts
+ displayName: 'Download ${{ parameters.displayName }}'
inputs:
buildType: current
downloadType: single
# Unzip artifact
- task: ExtractFiles@1
- displayName: Unzip test artifacts
+ displayName: 'Unzip ${{ parameters.displayName }}'
inputs:
archiveFilePatterns: ${{ parameters.downloadFolder }}/${{ parameters.artifactName }}/${{ parameters.artifactFileName }}
destinationFolder: ${{ parameters.unpackFolder }}
+ cleanDestinationFolder: ${{ parameters.cleanUnpackFolder }}
container: ''
crossrootfsDir: ''
timeoutInMinutes: ''
+ stagedBuild: false
### Format job
jobs:
osSubgroup: ${{ parameters.osSubgroup }}
container: ${{ parameters.container }}
crossrootfsDir: ${{ parameters.crossrootfsDir }}
+ stagedBuild: ${{ parameters.stagedBuild }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
name: ${{ format('format_{0}{1}_{2}', parameters.osGroup, parameters.osSubgroup, parameters.archType) }}
displayName: ${{ format('Formatting {0}{1} {2}', parameters.osGroup, parameters.osSubgroup, parameters.archType) }}
jobs:
#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
+#
# Debug builds
#
- template: /eng/platform-matrix.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
value: CORECLR
stages:
+ - stage: checkout
+ displayName: GIT Checkout
+ jobs:
+ #
+ # Checkout repository
+ #
+ - template: /eng/checkout-job.yml
+
- stage: build
+ displayName: Build
jobs:
#
# Release builds
jobTemplate: build-job.yml
buildConfig: release
platformGroup: all
+ stagedBuild: true
jobParameters:
# Publishing packages to blob feeds sometimes takes a long time
# due to waiting for an exclusive lock on the feed.
buildConfig: release
platformGroup: all
helixQueueGroup: all
- ignoreDependencyOnBuildJobs: true
+ stagedBuild: true
jobParameters:
testGroup: outerloop
condition: ne(variables['_BypassTesting'], 'true')
buildConfig: release
platformGroup: all
helixQueueGroup: all
- ignoreDependencyOnBuildJobs: true
+ stagedBuild: true
jobParameters:
testGroup: outerloop
readyToRun: true
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
pr: none
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
jobs:
#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
+#
# Debug builds
#
- template: /eng/platform-matrix.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
pr: none
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
always: true
jobs:
+#
+# Checkout repository
+#
+- template: /eng/checkout-job.yml
+
- template: /eng/platform-matrix.yml
parameters:
jobTemplate: build-job.yml
# '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'
- ignoreDependencyOnBuildJobs: false
+ stagedBuild: false
jobParameters: {}
jobs:
- ${{ if or(containsValue(parameters.platforms, 'Linux_arm'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: arm
osGroup: Linux
- ${{ if or(containsValue(parameters.platforms, 'Linux_arm64'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: arm64
osGroup: Linux
- ${{ if or(containsValue(parameters.platforms, 'Linux_musl_x64'), eq(parameters.platformGroup, 'all')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: x64
osGroup: Linux
- ${{ if or(containsValue(parameters.platforms, 'Linux_musl_arm64'), eq(parameters.platformGroup, 'all')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: arm64
osGroup: Linux
- ${{ if or(containsValue(parameters.platforms, 'Linux_rhel6_x64'), eq(parameters.platformGroup, 'all')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: x64
osGroup: Linux
- ${{ if or(containsValue(parameters.platforms, 'Linux_x64'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: x64
osGroup: Linux
- ${{ if or(containsValue(parameters.platforms, 'OSX_x64'), eq(parameters.platformGroup, 'all')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: x64
osGroup: OSX
- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_x64'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: x64
osGroup: Windows_NT
- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_x86'), in(parameters.platformGroup, 'all', 'gcstress')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: x86
osGroup: Windows_NT
- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_arm'), eq(parameters.platformGroup, 'all')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: arm
osGroup: Windows_NT
- ${{ if or(containsValue(parameters.platforms, 'Windows_NT_arm64'), eq(parameters.platformGroup, 'all')) }}:
- template: ${{ parameters.jobTemplate }}
parameters:
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
archType: arm64
osGroup: Windows_NT
helixQueues: ''
# If true, run the corefx tests instead of the coreclr ones
corefxTests: false
+ stagedBuild: false
displayNameArgs: ''
runInUnloadableContext: false
osSubgroup: ${{ parameters.osSubgroup }}
readyToRun: ${{ parameters.readyToRun }}
corefxTests: ${{ parameters.corefxTests }}
+ stagedBuild: ${{ parameters.stagedBuild }}
helixType: 'build/tests/'
# Test jobs should continue on error for internal builds
displayNameArgs: ''
runInUnloadableContext: false
condition: true
- ignoreDependencyOnBuildJobs: false
+ stagedBuild: false
### Test job
corefxTests: ${{ parameters.coreFxTests }}
displayNameArgs: ${{ parameters.displayNameArgs }}
condition: ${{ parameters.condition }}
- ignoreDependencyOnBuildJobs: ${{ parameters.ignoreDependencyOnBuildJobs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
- template: run-test-job.yml
parameters:
helixQueues: ${{ parameters.helixQueues }}
corefxTests: ${{ parameters.coreFxTests }}
displayNameArgs: ${{ parameters.displayNameArgs }}
+ stagedBuild: ${{ parameters.stagedBuild }}
runInUnloadableContext: ${{ parameters.runInUnloadableContext }}
archiveType: ''
tarCompression: ''
artifactName: ''
+ displayName: ''
steps:
# Zip Artifact
- task: ArchiveFiles@2
- displayName: Zip Tests
+ displayName: 'Zip ${{ parameters.displayName }}'
inputs:
rootFolderOrFile: ${{ parameters.rootFolder }}
archiveFile: ${{ parameters.archiveFile }}
includeRootFolder: ${{ parameters.includeRootFolder }}
- task: PublishBuildArtifacts@1
- displayName: Publish Artifact
+ displayName: 'Publish ${{ parameters.displayName }}'
inputs:
pathtoPublish: ${{ parameters.archiveFile }}
artifactName: ${{ parameters.artifactName }}
helixType: '(unspecified)'
container: ''
crossrootfsDir: ''
+ stagedBuild: false
# arcade-specific parameters
condition: ''
displayName: ${{ parameters.displayName }}
condition: ${{ parameters.condition }}
- dependsOn: ${{ parameters.dependsOn }}
+ dependsOn:
+ - ${{ if ne(parameters.stagedBuild, true) }}:
+ - ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
+ - 'checkout_windows'
+ - ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
+ - 'checkout_unix'
+ - ${{ if ne(parameters.dependsOn, '') }}:
+ - ${{ parameters.dependsOn }}
+
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
continueOnError: ${{ parameters.continueOnError }}
- ${{ each variable in parameters.variables }}:
- ${{insert}}: ${{ variable }}
- steps: ${{ parameters.steps }}
+ steps:
+ - checkout: none
+ clean: true
+
+ # Download the GIT repository
+ - template: /eng/download-artifact-step.yml
+ parameters:
+ displayName: 'GIT repository'
+ downloadFolder: $(Build.SourcesDirectory)/download/
+ cleanUnpackFolder: false
+ unpackFolder: $(Build.SourcesDirectory)
+ ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
+ artifactFileName: repo_windows.zip
+ artifactName: repo_windows
+ ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
+ artifactFileName: repo_unix.tar.gz
+ artifactName: repo_unix
+
+ - ${{ parameters.steps }}
crossrootfsDir: ''
corefxTests: false
readyToRun: false
+ stagedBuild: false
# arcade-specific parameters
condition: ''
helixType: ${{ parameters.helixType }}
container: ${{ parameters.container }}
crossrootfsDir: ${{ parameters.crossrootfsDir }}
+ stagedBuild: ${{ parameters.stagedBuild }}
# arcade-specific parameters
condition: ${{ parameters.condition }}