Use platform-matrix and split jobs by steps for libraries pipelines (#274)

This commit is contained in:
Santiago Fernandez Madero 2019-11-28 02:22:57 -08:00 committed by GitHub
parent 89f3ff1971
commit ef33d76b27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 667 additions and 944 deletions

View File

@ -159,6 +159,22 @@ jobs:
managedTestBuildOsGroup: OSX
${{ insert }}: ${{ parameters.jobParameters }}
- ${{ if containsValue(parameters.platforms, 'WebAssembly_wasm') }}:
- template: xplat-setup.yml
parameters:
jobTemplate: ${{ parameters.jobTemplate }}
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
osGroup: WebAssembly
archType: wasm
platform: WebAssembly_wasm
container:
image: ubuntu-16.04-a50a721-20191023143845
registry: mcr
jobParameters:
stagedBuild: ${{ parameters.stagedBuild }}
buildConfig: ${{ parameters.buildConfig }}
${{ insert }}: ${{ parameters.jobParameters }}
# FreeBSD
# FreeBSD machines are currently offline. Re-enable in the official build when

View File

@ -22,7 +22,6 @@ trigger:
- src/coreclr/*
- eng/pipelines/coreclr/*
- eng/pipelines/installer/*
- eng/pipelines/common/*
pr:
branches:
@ -43,30 +42,6 @@ pr:
- src/coreclr/*
- eng/pipelines/coreclr/*
- eng/pipelines/installer/*
- eng/pipelines/common/*
resources:
containers:
- container: centos7_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-f39df28-20191023143754
- container: centos6_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-6-f39df28-20191023143802
- container: alpine_39_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.9-WithNode-0fc54a3-20190918214015
- container: alpine_37_arm64_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-alpine-406629a-20191023143847
- container: ubuntu_1604_arm64_cross_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-cfdd435-20191023143847
- container: ubuntu_1604_arm_cross_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-14.04-23cacb0-20191023143847
- container: ubuntu_1604
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-a50a721-20191023143845
variables:
- template: variables.yml
@ -83,55 +58,96 @@ variables:
- name: _DotNetValidationArtifactsCategory
value: .NETCore
stages:
# Windows legs
- template: ${{ variables['pipelinesPath'] }}/windows.yml
jobs:
- template: /eng/pipelines/common/checkout-job.yml
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
# Linux legs
- template: ${{ variables['pipelinesPath'] }}/linux.yml
parameters:
isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
# MacOS legs
- template: ${{ variables['pipelinesPath'] }}/macos.yml
parameters:
isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
# FreeBSD leg is only for official builds
# - template: ${{ variables['pipelinesPath'] }}/freebsd.yml
# parameters:
# isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
# fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
# Publish and validation steps. Only run in official builds
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}:
- template: ${{ variables['pipelinesPath'] }}/pre-publish.yml
jobTemplate: /eng/pipelines/libraries/build-job.yml
buildConfig: Release
platforms:
- Linux_rhel6_x64
- Windows_NT_x86
- ${{ if eq(variables['isFullMatrix'], true) }}:
- OSX_x64
- Windows_NT_x64
- Linux_x64
- Linux_arm
- Linux_arm64
- Linux_musl_x64
- Linux_musl_arm64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
isFullMatrix: ${{ variables['isFullMatrix'] }}
framework: netcoreapp
${{ if eq(variables['isOfficialBuild'], false) }}:
runTests: true
testScope: innerloop
- ${{ if eq(variables['isFullMatrix'], false) }}:
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
dependsOn:
- WindowsStage
- LinuxStage
- MacOSStage
# - FreeBSD
jobTemplate: /eng/pipelines/libraries/build-job.yml
buildConfig: Debug
platforms:
- Windows_NT_x64
- OSX_x64
- Linux_x64
- Linux_musl_x64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
isFullMatrix: ${{ variables['isFullMatrix'] }}
testScope: innerloop
framework: netcoreapp
runTests: true
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/libraries/build-job.yml
${{ if eq(variables['isFullMatrix'], false) }}:
buildConfig: Debug
${{ if eq(variables['isFullMatrix'], true) }}:
buildConfig: Release
platforms:
- WebAssembly_wasm
- ${{ if eq(variables['isFullMatrix'], false) }}:
- Linux_arm
- Linux_arm64
- Linux_musl_arm64
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
framework: netcoreapp
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/libraries/build-job.yml
buildConfig: Release
platforms:
- Windows_NT_x86
- ${{ if eq(variables['isFullMatrix'], true) }}:
- Windows_NT_x64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
framework: netfx
${{ if eq(variables['isOfficialBuild'], false) }}:
runTests: true
testScope: innerloop
- template: eng\common\templates\post-build\post-build.yml
parameters:
validateDependsOn:
- PrePublish
enableSymbolValidation: false # https://github.com/dotnet/arcade/issues/2871
SDLValidationParameters:
enable: true
params: ' -SourceToolsList @("policheck","credscan")
-TsaInstanceURL "$(TsaInstanceURL)"
-TsaProjectName "$(TsaProjectName)"
-TsaNotificationEmail "$(TsaNotificationEmail)"
-TsaCodebaseAdmin "$(TsaCodebaseAdmin)"
-TsaBugAreaPath "$(TsaBugAreaPath)"
-TsaIterationPath "$(TsaIterationPath)"
-TsaRepositoryName "CoreFX"
-TsaCodebaseName "CoreFX"
-TsaPublish $True'
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/libraries/build-job.yml
${{ if eq(variables['isFullMatrix'], false) }}:
buildConfig: Debug
${{ if eq(variables['isFullMatrix'], true) }}:
buildConfig: Release
platforms:
- Windows_NT_x64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
framework: allConfigurations
${{ if eq(variables['isOfficialBuild'], false) }}:
runTests: true

View File

@ -0,0 +1,105 @@
parameters:
buildConfig: ''
osGroup: ''
archType: ''
osSubgroup: ''
framework: ''
isOfficialBuild: false
timeoutInMinutes: 150
container: ''
steps: []
dependsOn: []
variables: {}
name: ''
displayName: ''
testScope: ''
pool: ''
stepName: ''
jobs:
- template: /eng/common/templates/job/job.yml
parameters:
name: ${{ format('libraries_{0}_{1}_{2}{3}_{4}_{5}', parameters.stepName, parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
${{ if eq(parameters.framework, 'netcoreapp') }}:
displayName: ${{ format('{0} {1}{2} {3} {4}', parameters.stepName, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
${{ if ne(parameters.framework, 'netcoreapp') }}:
displayName: ${{ format('{0} {1} {2} {3} {4}', parameters.stepName, parameters.osGroup, parameters.framework, parameters.archType, parameters.buildConfig) }}
enableTelemetry: ${{ parameters.isOfficialBuild }} # TODO: figure out if it's needed
container: ${{ parameters.container }}
helixRepo: dotnet/runtime
pool: ${{ parameters.pool }}
variables:
- _BuildConfig: ${{ parameters.buildConfig }}
- _msbuildCommonParameters: ''
- _stripSymbolsArg: ''
- _runtimeOSArg: ''
- _portableArg: ''
- _finalFrameworkArg: -framework ${{ parameters.framework }}
- _buildScript: $(buildScriptFileName)$(scriptExt)
- _warnAsErrorArg: ''
- _testScopeArg: ''
- ${{ if ne(parameters.testScope, '') }}:
- _testScopeArg: -testscope ${{ parameters.testScope }}
- ${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.osSubGroup, '_rhel6')) }}:
- _runtimeOSArg: /p:RuntimeOS=rhel.6
- _portableArg: /p:PortableBuild=false
- ${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.osSubGroup, '_musl')) }}:
- _runtimeOSArg: /p:RuntimeOS=linux-musl
- ${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.osSubGroup, ''), eq(parameters.archType, 'arm')) }}:
- _runtimeOSArg: /p:RuntimeOS=ubuntu.16.04
- ${{ if and(or(eq(parameters.osGroup, 'Linux'), eq(parameters.osGroup, 'WebAssembly')), ne(parameters.container, '')) }}:
- _warnAsErrorArg: '-warnAsError false'
- ${{ if eq(parameters.osGroup, 'WebAssembly') }}:
- _runtimeOSArg: -os ${{ parameters.osGroup }}
- ${{ if eq(parameters.framework, 'allConfigurations' ) }}:
- _finalFrameworkArg: -allConfigurations
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- _msbuildCommonParameters: /p:OfficialBuildId=$(Build.BuildNumber)
# Windows variables
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
- _msbuildCommand: powershell -ExecutionPolicy ByPass -NoProfile eng\common\msbuild.ps1 -warnaserror:0 -ci
- _runtimeOSArg: /p:RuntimeOS=win10
# Non-Windows variables
- ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
- _msbuildCommand: ./eng/common/msbuild.sh --warnaserror false --ci
- _buildScript: ./$(buildScriptFileName)$(scriptExt)
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- _stripSymbolsArg: -stripSymbols
- _buildArguments: -configuration ${{ parameters.buildConfig }} -ci -arch ${{ parameters.archType }} $(_finalFrameworkArg) $(_stripSymbolsArg) $(_testScopeArg) $(_warnAsErrorArg) $(_runtimeOSArg) $(_portableArg) $(_msbuildCommonParameters)
- ${{ parameters.variables }}
dependsOn:
- checkout
- ${{ parameters.dependsOn }}
workspace:
clean: all
enablePublishBuildArtifacts: true
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
steps:
- checkout: none
clean: true
- download: current
artifact: Checkout_bundle
displayName: Download Checkout.bundle
- script: |
git clone $(Pipeline.Workspace)/Checkout_bundle/Checkout.bundle .
git remote set-url origin $(Build.Repository.Uri)
displayName: Clone the repository from Checkout.bundle
- ${{ parameters.steps }}

View File

@ -0,0 +1,128 @@
parameters:
buildConfig: ''
osGroup: ''
osSubgroup: ''
archType: ''
framework: netcoreapp
isOfficialBuild: false
timeoutInMinutes: 150
preBuildSteps: []
container: ''
variables: {}
pool: ''
runTests: false
testScope: ''
jobs:
- template: /eng/pipelines/libraries/base-job.yml
parameters:
buildConfig: ${{ parameters.buildConfig }}
osGroup: ${{ parameters.osGroup }}
osSubgroup: ${{ parameters.osSubgroup }}
archType: ${{ parameters.archType }}
framework: ${{ parameters.framework }}
isOfficialBuild: ${{ parameters.isOfficialBuild }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
preBuildSteps: ${{ parameters.preBuildSteps }}
container: ${{ parameters.container }}
pool: ${{ parameters.pool }}
testScope: ${{ parameters.testScope }}
stepName: Build
variables:
- _skipTestRestoreArg: /p:SkipTestRestore=true
- _buildAction: -build
- ${{ parameters.variables }}
- ${{ if eq(parameters.osGroup, 'WebAssembly') }}:
- EMSDK_PATH: $(Build.BinariesDirectory)/emsdk
- ${{ if eq(parameters.runTests, true) }}:
- _buildAction: -build -buildtests /p:ArchiveTests=true
- ${{ if ne(parameters.framework, 'allConfigurations') }}:
- _skipTestRestoreArg: /p:SkipTestRestore=false
steps:
- script: $(_buildScript) -restore $(_buildArguments) $(_skipTestRestoreArg)
displayName: Restore
- ${{ if eq(parameters.isOfficialBuild, true) }}:
- task: DotNetCoreCLI@2
displayName: Restore internal tools
condition: and(succeeded(), ne(variables['_skipRestoreInternalTools'], 'true'))
inputs:
command: restore
feedsToUse: config
projects: 'eng/common/internal/Tools.csproj'
nugetConfigPath: 'eng/internal/NuGet.config'
restoreDirectory: '$(Build.SourcesDirectory)\.packages'
verbosityRestore: 'normal'
externalFeedCredentials: 'dotnet-core-internal-tooling'
- ${{ if eq(parameters.osGroup, 'OSX') }}:
- script: |
brew install pkgconfig openssl
ln -s /usr/local/opt/openssl/lib/pkgconfig/libcrypto.pc /usr/local/lib/pkgconfig/
ln -s /usr/local/opt/openssl/lib/pkgconfig/libssl.pc /usr/local/lib/pkgconfig/
ln -s /usr/local/opt/openssl/lib/pkgconfig/openssl.pc /usr/local/lib/pkgconfig/
displayName: Install Build Dependencies
- ${{ if eq(parameters.osGroup, 'WebAssembly') }}:
- script: |
EMSCRIPTEN_VERSION=1.38.47
git clone https://github.com/emscripten-core/emsdk.git $(EMSDK_PATH)
cd $(EMSDK_PATH)
./emsdk install ${EMSCRIPTEN_VERSION}-upstream
./emsdk activate --embedded ${EMSCRIPTEN_VERSION}-upstream
displayName: Install Emscripten
- script: $(_buildScript)
$(_buildAction)
$(_buildArguments)
displayName: Build
- ${{ if eq(parameters.runTests, false) }}:
- task: CopyFiles@2
displayName: Prepare ref folder to publish
inputs:
sourceFolder: $(Build.SourcesDirectory)/artifacts/bin/ref
targetFolder: $(Build.ArtifactStagingDirectory)/artifacts/bin/ref
- task: CopyFiles@2
displayName: Prepare runtime folder to publish
inputs:
sourceFolder: $(Build.SourcesDirectory)/artifacts/bin/runtime
targetFolder: $(Build.ArtifactStagingDirectory)/artifacts/bin/runtime
- task: CopyFiles@2
displayName: Prepare testhost folder to publish
inputs:
sourceFolder: $(Build.SourcesDirectory)/artifacts/bin/testhost
targetFolder: $(Build.ArtifactStagingDirectory)/artifacts/bin/testhost
- task: CopyFiles@2
displayName: Prepare artifacts toolset folder to publish
inputs:
sourceFolder: $(Build.SourcesDirectory)/artifacts/toolset
targetFolder: $(Build.ArtifactStagingDirectory)/artifacts/toolset
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.ArtifactStagingDirectory)/artifacts
includeRootFolder: false
archiveType: $(archiveType)
archiveExtension: $(archiveExtension)
tarCompression: $(tarCompression)
artifactName: ${{ format('libraries_bin_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
displayName: Build Assets
- ${{ if eq(parameters.runTests, true) }}:
- template: /eng/pipelines/libraries/helix.yml
parameters:
targetOS: ${{ parameters.osGroup }}
archGroup: ${{ parameters.archType }}
configuration: ${{ parameters.buildConfig }}
helixQueues: ${{ join('+', parameters.helixQueues) }}
msbuildScript: $(_msbuildCommand)
framework: ${{ parameters.framework }}
testScope: ${{ parameters.testScope }}
creator: dotnet-bot
helixToken: ''

View File

@ -0,0 +1,65 @@
parameters:
buildConfig: ''
osGroup: ''
osSubgroup: ''
archType: ''
framework: netcoreapp
isOfficialBuild: false
timeoutInMinutes: 150
container: ''
publishTestArtifacs: true
pool: ''
testScope: ''
variables: {}
runTests: false
jobs:
- template: /eng/pipelines/libraries/base-job.yml
parameters:
buildConfig: ${{ parameters.buildConfig }}
osGroup: ${{ parameters.osGroup }}
osSubgroup: ${{ parameters.osSubgroup }}
archType: ${{ parameters.archType }}
framework: ${{ parameters.framework }}
isOfficialBuild: ${{ parameters.isOfficialBuild }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
container: ${{ parameters.container }}
pool: ${{ parameters.pool }}
testScope: ${{ parameters.testScope }}
stepName: Test
dependsOn:
- ${{ format('libraries_Build_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
variables:
- _archiveTestsParameter: /p:ArchiveTests=true
- _skipTestRestoreArg: /p:SkipTestRestore=false
- ${{ parameters.variables }}
steps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
displayName: Build Assets
artifactName: ${{ format('libraries_bin_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
artifactFileName: ${{ format('libraries_bin_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts
- script: $(_buildScript) -restore $(_buildArguments) $(_skipTestRestoreArg)
displayName: Restore
- script: $(_buildScript)
-buildtests
$(_buildArguments)
$(_archiveTestsParameter)
displayName: Build
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/artifacts/helix
includeRootFolder: true
archiveType: $(archiveType)
archiveExtension: $(archiveExtension)
tarCompression: $(tarCompression)
artifactName: ${{ format('libraries_test_assets_{0}_{1}_{2}_{3}', parameters.framework, parameters.osGroup, parameters.archType, parameters.buildConfig) }}
displayName: Test Assets

View File

@ -1,217 +0,0 @@
parameters:
# Required: TargetOS value to know what script commands to use
# Accepted values:
# - Windows_NT
# - Linux
# - OSX
# - FreeBSD
targetOS: ''
# Required: A collection of jobs to run - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job
jobs: []
# Required: value to specify if the job is comming from an official build to run extra steps and sign binaries
# Default: false
isOfficialBuild: false
# EACH JOB SHOULD INCLUDE THE FOLLOWING PROPERTIES (ASIDE FROM THE REQUIRED ONES IN THE JOB SCHEMA)
# Required: as part of the strategy matrix, the following variables should be defined
# _BuildConfig: Debug | Release
# _architecture: x64 | x86 | arm | arm64
# _framework: (netcoreapp, netfx).
# _helixQueues: Windows.Amd64 (Only needed if submitToHelix -> true.) -- Queues should be separated by + if multiple.
# Required: empty | innerloop | outerloop | all
testScope: ''
# Optional: _publishTests -> Boolean -> Publish test assets to blob storage if true.
# Default: false
# _publishTests: true | false
# Required: submitToHelix -> Boolean -> Value to know if it should submit tests payloads to helix.
# Optional: buildScriptPrefix -> String -> string to append to Unix build script.
# buildScriptPrefix: 'HOME=/home/ ' -> 'HOME=/home/ ./$(buildScriptName).sh ...'
# Optional: buildExtraArguments -> String -> string to append at the end of the build arguments
# buildExtraArguments: /p:RuntimeOS=win10 -> '$(buildScriptName).cmd ... /p:RuntimeOS=win10'
# Optional: customBuildSteps -> Array -> list of steps to run instead of the common build steps.
# customBuildSteps:
# - script: echo Hello World
# displayName: MyScript
# Optional: preBuildSteps -> Array -> list of steps to be executed before common build steps.
# In example, to install build dependencies, or setup an environment.
# preBuildSteps:
# - script: brew install cmake
# displayName: Install Cmake
# timeoutInMinutes: if a job doesn't define it, we will default it to 150 minutes
jobs:
- ${{ each job in parameters.jobs }}:
- template: /eng/common/templates/job/job.yml
parameters:
variables:
# pass along job variables
- ${{ each variable in job.variables }}:
- ${{ if ne(variable.name, '') }}:
- name: ${{ variable.name }}
value: ${{ variable.value }}
- ${{ if ne(variable.group, '') }}:
- group: ${{ variable.group }}
# handle key-value variable syntax.
# example:
# - [key]: [value]
- ${{ if and(eq(variable.name, ''), eq(variable.group, '')) }}:
- ${{ each pair in variable }}:
- name: ${{ pair.key }}
value: ${{ pair.value }}
- _msbuildCommonParameters: ''
- _archiveTestsParameter: ''
- _finalFrameworkArg: -framework $(_framework)
- _testScopeArg: ''
- ${{ if ne(parameters.testScope, '') }}:
- _testScopeArg: -testscope ${{ parameters.testScope }}
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- _msbuildCommonParameters: /p:OfficialBuildId=$(Build.BuildNumber)
- ${{ if eq(job.submitToHelix, 'true') }}:
- _archiveTestsParameter: /p:ArchiveTests=true
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- group: DotNet-HelixApi-Access
- ${{ if ne(job.frameworkArg, '') }}:
- _finalFrameworkArg: ${{ job.frameworkArg }}
- _args: -configuration $(_BuildConfig) -ci -arch $(_architecture) $(_finalFrameworkArg) $(_archiveTestsParameter) ${{ job.buildExtraArguments }}
- _commonArguments: $(_args)
# Windows variables
- ${{ if eq(parameters.targetOS, 'Windows_NT') }}:
- _buildScript: $(buildScriptFileName).cmd
- _msbuildCommand: powershell -ExecutionPolicy ByPass -NoProfile eng\common\msbuild.ps1 -warnaserror:0 -ci
# Non-Windows variables
- ${{ if ne(parameters.targetOS, 'Windows_NT') }}:
- _buildScript: ${{ job.buildScriptPrefix }}./$(buildScriptFileName).sh
- _msbuildCommand: ${{ job.buildScriptPrefix }}./eng/common/msbuild.sh --warnaserror false --ci
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- _commonArguments: $(_args) -stripSymbols
# pass along job properties
${{ each property in job }}:
${{ if and(ne(property.key, 'job'), ne(property.key, 'variables')) }}:
${{ property.key }}: ${{ property.value }}
# enable helix telemetry -- we only send telemetry during official builds
enableTelemetry: ${{ parameters.isOfficialBuild }}
helixRepo: dotnet/corefx
name: ${{ job.job }}
workspace:
clean: all
# enabling publish build artifacts, will publish all build logs under /artifacts/log/
enablePublishBuildArtifacts: true
${{ if eq(job.timeoutInMinutes, '') }}:
timeoutInMinutes: 150
steps:
- ${{ if ne(job.preBuildSteps[0], '') }}:
- ${{ job.preBuildSteps }}
- script: $(_buildScript) -restore $(_commonArguments)
displayName: Restore Build Tools
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- task: DotNetCoreCLI@2
displayName: Restore internal tools
condition: and(succeeded(), ne(variables['_skipRestoreInternalTools'], 'true'))
inputs:
command: restore
feedsToUse: config
projects: 'eng/common/internal/Tools.csproj'
nugetConfigPath: 'eng/internal/NuGet.config'
restoreDirectory: '$(Build.SourcesDirectory)\.packages'
verbosityRestore: 'normal'
externalFeedCredentials: 'dotnet-core-internal-tooling'
- ${{ if eq(job.customBuildSteps[0], '') }}:
- script: $(_buildScript)
-build
-buildtests
$(_commonArguments)
$(_testScopeArg)
$(_msbuildCommonParameters)
displayName: Build Sources and Tests
- ${{ if ne(job.customBuildSteps[0], '') }}:
- ${{ job.customBuildSteps }}
- ${{ if eq(job.submitToHelix, 'true') }}:
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- script: $(_msbuildCommand) $(sourcesRoot)/publishTestAssets.proj
/p:FilesToPublishPattern=$(Build.SourcesDirectory)/artifacts/helix/**/*.zip
/p:AccountKey=$(dotnetfeed-storage-access-key-1)
/p:ExpectedFeedUrl=$(_dotnetFeedUrl)
/p:OSGroup=${{ parameters.targetOS }}
/p:ArchGroup=$(_architecture)
/p:ConfigurationGroup=$(_BuildConfig)
/p:TargetGroup=$(_framework)
/p:OfficialBuildId=$(Build.BuildNumber)
/p:ContinuousIntegrationBuild=true
/p:AssetManifestFileName=corefx-test-assets.xml
/p:ManifestBuildId=$(Build.BuildNumber)
/p:ManifestBuildData=Location=$(_dotnetFeedUrl)
/p:ManifestBranch=$(Build.SourceBranchName)
/p:ManifestCommit=$(Build.SourceVersion)
/p:ManifestRepoUri=$(Build.Repository.Uri)
displayName: Publish test assets to dotnet-core feed
condition: and(succeeded(), eq(variables['_publishTests'], 'true'))
- task: PublishBuildArtifacts@1
displayName: Publish test asset manifest to artifacts container
inputs:
pathToPublish: $(Build.SourcesDirectory)/artifacts/TestAssetsManifests
artifactName: $(Agent.Os)_$(Agent.JobName)
artifactType: container
condition: and(succeeded(), eq(variables['_publishTests'], 'true'))
- template: /eng/pipelines/libraries/helix.yml
parameters:
# send tests to helix only on public builds, official scheduled builds or manual official builds.
condition: eq(${{ parameters.isOfficialBuild }}, False)
targetOS: ${{ parameters.targetOS }}
archGroup: $(_architecture)
configuration: $(_BuildConfig)
helixQueues: $(_helixQueues)
msbuildScript: $(_msbuildCommand)
framework: $(_framework)
testScope: ${{ coalesce(parameters.testScope, 'innerloop') }} # if parameters.testScope is empty use 'innerloop'
${{ if eq(parameters.isOfficialBuild, 'true') }}:
officialBuildId: $(Build.BuildNumber)
helixToken: $(HelixApiAccessToken)
${{ if eq(parameters.isOfficialBuild, 'false') }}:
# TODO: SET Creator to the PR owner whenever Azure DevOps supports a good way to retrieve it.
creator: dotnet-bot
helixToken: ''
- ${{ if eq(parameters.isOfficialBuild, 'true') }}:
- task: PublishBuildArtifacts@1
displayName: Publish packages to artifacts container
inputs:
pathToPublish: $(Build.SourcesDirectory)/artifacts/packages
artifactName: packages
artifactType: container
condition: and(succeeded(), ne(variables['_skipPublishPackages'], 'true'))

View File

@ -1,34 +0,0 @@
# FreeBSD leg
parameters:
# Required: value to specify if the job is comming from an official build to run extra steps and sign binaries
# Default: false
isOfficialBuild: false
# Required: value to specify if the full test matrix should be tested
# Default: false
fullMatrix: false
# Optional: value to scope the tests.
# Default: empty
testScope: ''
jobs:
- template: corefx-base.yml
parameters:
isOfficialBuild: ${{ parameters.isOfficialBuild }}
testScope: ${{ parameters.testScope }}
targetOS: FreeBSD
jobs:
- job: FreeBSD
strategy:
matrix:
x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netcoreapp
_buildScriptPrefix: 'DotNetCoreSdkDir=/usr/local/dotnet/ DotNetRoot=/usr/local/dotnet/ '
pool:
name: dnceng-freebsd-internal
buildScriptPrefix: $(_buildScriptPrefix)
submitToHelix: false

View File

@ -0,0 +1,120 @@
parameters:
jobTemplate: ''
variables: {}
osGroup: ''
osSubgroup: ''
archType: ''
container: ''
pool: ''
platform: ''
jobParameters: {}
jobs:
- template: ${{ parameters.jobTemplate }}
parameters:
variables: ${{ parameters.variables }}
osGroup: ${{ parameters.osGroup }}
osSubgroup: ${{ parameters.osSubgroup }}
archType: ${{ parameters.archType }}
container: ${{ parameters.container }}
pool: ${{ parameters.pool }}
helixQueues:
# Linux arm
- ${{ if eq(parameters.platform, 'Linux_arm') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- \(Debian.9.Arm32.Open\)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm32v7-74c9941-20190620155841
# Linux arm64
- ${{ if eq(parameters.platform, 'Linux_arm64') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- \(Ubuntu.1804.ArmArch.Open\)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-helix-arm64v8-a45aeeb-20190620160300
# Linux musl x64
- ${{ if eq(parameters.platform, 'Linux_musl_x64') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- \(Alpine.310.Amd64.Open\)ubuntu.1604.amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.10-helix-3043688-20190918214010
- ${{ if eq(parameters.jobParameters.isFullMatrix, false) }}:
- \(Alpine.38.Amd64.Open\)ubuntu.1604.amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-09ca40b-20190620184125
- \(Alpine.39.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.9-helix-09ca40b-20190620184719
- \(Alpine.310.Amd64.Open\)ubuntu.1604.amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.10-helix-3043688-20190918214010
# Linux musl arm64
- ${{ if eq(parameters.platform, 'Linux_musl_arm64') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- \(Alpine.38.Arm64.Open\)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-arm64v8-a45aeeb-20190620184035
# Linux rhel6 x64
- ${{ if eq(parameters.platform, 'Linux_rhel6_x64') }}:
- RedHat.6.Amd64.Open
# Linux x64
- ${{ if eq(parameters.platform, 'Linux_x64') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- Centos.7.Amd64.Open
- RedHat.7.Amd64.Open
- Debian.9.Amd64.Open
- Ubuntu.1604.Amd64.Open
- Ubuntu.1804.Amd64.Open
- SLES.12.Amd64.Open
- SLES.15.Amd64.Open
- \(Fedora.29.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-29-helix-09ca40b-20190508143249
- \(Ubuntu.1910.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-19.10-helix-amd64-cfcfd50-20191030180623
- \(Debian.10.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-10-helix-amd64-7c6abd3-20190620155928
- ${{ if eq(parameters.jobParameters.isFullMatrix, false) }}:
- Centos.7.Amd64.Open
- RedHat.7.Amd64.Open
- Debian.9.Amd64.Open
- Ubuntu.1604.Amd64.Open
- Ubuntu.1804.Amd64.Open
- SLES.15.Amd64.Open
- \(Fedora.29.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-29-helix-09ca40b-20190508143249
# OSX x64
- ${{ if eq(parameters.platform, 'OSX_x64') }}:
- OSX.1013.Amd64.Open
- OSX.1014.Amd64.Open
# Windows_NT x64
- ${{ if eq(parameters.platform, 'Windows_NT_x64') }}:
# netcoreapp
- ${{ if eq(parameters.jobParameters.framework, 'netcoreapp') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- Windows.7.Amd64.Open
- Windows.81.Amd64.Open
- Windows.10.Amd64.ServerRS5.Open
- Windows.10.Amd64.Server19H1.Open
- "`(Windows.Nano.1809.Amd64.Open`)windows.10.amd64.serverrs5.open@mcr.microsoft.com/dotnet-buildtools/prereqs:nanoserver-1809-helix-amd64-61052b7-20190723211353"
- ${{ if eq(parameters.jobParameters.isFullMatrix, false) }}:
- Windows.7.Amd64.Open
- Windows.81.Amd64.Open
- Windows.10.Amd64.Server19H1.ES.Open
- "`(Windows.Nano.1809.Amd64.Open`)windows.10.amd64.serverrs5.open@mcr.microsoft.com/dotnet-buildtools/prereqs:nanoserver-1809-helix-amd64-61052b7-20190723211353"
# NETFX
- ${{ if eq(parameters.jobParameters.framework, 'netfx') }}:
- Windows.10.Amd64.Client19H1.Open
# AllConfigurations
- ${{ if eq(parameters.jobParameters.framework, 'allConfigurations') }}:
- Windows.10.Amd64.Server19H1.Open
# Windows_NT x86
- ${{ if eq(parameters.platform, 'Windows_NT_x86') }}:
# netcoreapp
- ${{ if eq(parameters.jobParameters.framework, 'netcoreapp') }}:
- ${{ if eq(parameters.jobParameters.isFullMatrix, true) }}:
- Windows.7.Amd64.Open
- Windows.81.Amd64.Open
- Windows.10.Amd64.ServerRS5.Open
- Windows.10.Amd64.Server19H1.Open
- ${{ if eq(parameters.jobParameters.isFullMatrix, false) }}:
- Windows.7.Amd64.Open
- Windows.81.Amd64.Open
- Windows.10.Amd64.Server19H1.ES.Open
# NETFX
- ${{ if eq(parameters.jobParameters.framework, 'netfx') }}:
- Windows.10.Amd64.Client19H1.Open
${{ insert }}: ${{ parameters.jobParameters }}

View File

@ -4,10 +4,8 @@ parameters:
creator: ''
framework: ''
helixQueues: ''
helixToken: ''
msbuildScript: ''
targetOS: ''
officialBuildId: ''
testScope: 'innerloop' # innerloop | outerloop | all
condition: always()
@ -22,9 +20,7 @@ steps:
/p:TargetGroup=${{ parameters.framework }}
/p:HelixTargetQueues=${{ parameters.helixQueues }}
/p:HelixBuild=$(Build.BuildNumber)
/p:HelixAccessToken=${{ parameters.helixToken }}
/p:Creator=${{ parameters.creator }}
/p:OfficialBuildId=${{ parameters.officialBuildId }}
/bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog
displayName: Send to Helix
condition: and(succeeded(), ${{ parameters.condition }})

View File

@ -1,195 +0,0 @@
# Linux legs
parameters:
# Required: value to specify if the job is comming from an official build to run extra steps and sign binaries
# Default: false
isOfficialBuild: false
# Required: value to specify if the full test matrix should be tested
# Default: false
fullMatrix: false
# Optional: value to scope the tests.
# Default: empty
testScope: ''
stages:
- stage: LinuxStage
displayName: Linux
dependsOn: []
jobs:
- template: corefx-base.yml
parameters:
isOfficialBuild: ${{ parameters.isOfficialBuild }}
testScope: ${{ parameters.testScope }}
targetOS: Linux
jobs:
# Legs with Helix testing
- job: LinuxTest
displayName: Build
strategy:
matrix:
# Run RedHat6 in release mode on CI to cover Release configuration differences
RedHat6_x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netcoreapp
_buildScriptPrefix: ''
_buildExtraArguments: /p:RuntimeOS=rhel.6 /p:PortableBuild=false
_dockerContainer: centos6_container
_helixQueues: $(redhatHelixQueue)
_publishTests: ${{ parameters.fullMatrix }}
${{ if eq(parameters.fullMatrix, 'false') }}:
x64_Debug:
_BuildConfig: Debug
_architecture: x64
_framework: netcoreapp
_helixQueues: $(linuxDefaultQueues)
_dockerContainer: centos7_container
_buildScriptPrefix: ''
_buildExtraArguments: ''
musl_x64_Debug:
_BuildConfig: Debug
_architecture: x64
_framework: netcoreapp
_helixQueues: $(alpineQueues)
_dockerContainer: alpine_39_container
_buildScriptPrefix: ''
_buildExtraArguments: /p:RuntimeOS=linux-musl
${{ if eq(parameters.fullMatrix, 'true') }}:
x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netcoreapp
_helixQueues: $(linuxDefaultQueues)
_dockerContainer: centos7_container
_buildScriptPrefix: ''
_buildExtraArguments: ''
_publishTests: true
musl_x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netcoreapp
_helixQueues: $(alpineQueues)
_dockerContainer: alpine_39_container
_buildScriptPrefix: ''
_buildExtraArguments: /p:RuntimeOS=linux-musl
_publishTests: true
arm_Release:
_BuildConfig: Release
_architecture: arm
_framework: netcoreapp
_helixQueues: $(linuxArmQueues)
_dockerContainer: ubuntu_1604_arm_cross_container
_buildScriptPrefix: 'ROOTFS_DIR=/crossrootfs/arm '
_buildExtraArguments: -warnAsError false
_publishTests: true
musl_arm64_Release:
_BuildConfig: Release
_architecture: arm64
_framework: netcoreapp
_helixQueues: $(alpineArm64Queues)
_dockerContainer: alpine_37_arm64_container
_buildScriptPrefix: 'ROOTFS_DIR=/crossrootfs/arm64 '
_buildExtraArguments: -warnAsError false /p:RuntimeOS=linux-musl
_publishTests: true
arm64_Release:
_BuildConfig: Release
_architecture: arm64
_framework: netcoreapp
_helixQueues: $(linuxArm64Queues)
_dockerContainer: ubuntu_1604_arm64_cross_container
_buildScriptPrefix: 'ROOTFS_DIR=/crossrootfs/arm64 '
_buildExtraArguments: -warnAsError false
_publishTests: true
pool:
name: Hosted Ubuntu 1604
container: $[ variables['_dockerContainer'] ]
buildScriptPrefix: $(_buildScriptPrefix)
buildExtraArguments: $(_buildExtraArguments)
submitToHelix: true
# Temporary till we reduced workloads on ARM64
timeoutInMinutes: 240
variables:
- redhatHelixQueue: RedHat.6.Amd64.Open
- ${{ if eq(parameters.fullMatrix, 'false') }}:
- linuxDefaultQueues: Centos.7.Amd64.Open+RedHat.7.Amd64.Open+Debian.9.Amd64.Open+Ubuntu.1604.Amd64.Open+Ubuntu.1804.Amd64.Open+SLES.15.Amd64.Open+\(Fedora.29.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-29-helix-09ca40b-20190508143249
- alpineQueues: \(Alpine.310.Amd64.Open\)ubuntu.1604.amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.10-helix-3043688-20190918214010
- ${{ if eq(parameters.fullMatrix, 'true') }}:
- linuxDefaultQueues: Centos.7.Amd64.Open+RedHat.7.Amd64.Open+Debian.9.Amd64.Open+Ubuntu.1604.Amd64.Open+Ubuntu.1804.Amd64.Open+SLES.12.Amd64.Open+SLES.15.Amd64.Open+\(Fedora.29.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-29-helix-09ca40b-20190508143249+\(Ubuntu.1910.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-19.10-helix-amd64-cfcfd50-20191030180623+\(Debian.10.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-10-helix-amd64-7c6abd3-20190620155928
- linuxArmQueues: \(Debian.9.Arm32.Open\)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-9-helix-arm32v7-74c9941-20190620155841
- alpineQueues: \(Alpine.38.Amd64.Open\)ubuntu.1604.amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-09ca40b-20190620184125+\(Alpine.39.Amd64.Open\)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.9-helix-09ca40b-20190620184719+\(Alpine.310.Amd64.Open\)ubuntu.1604.amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.10-helix-3043688-20190918214010
- alpineArm64Queues: \(Alpine.38.Arm64.Open\)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.8-helix-arm64v8-a45aeeb-20190620184035
- linuxArm64Queues: \(Ubuntu.1804.ArmArch.Open\)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-helix-arm64v8-a45aeeb-20190620160300
# Legs without helix testing
# Don't run these legs in outerloop builds
- ${{ if and(ne(parameters.testScope, 'outerloop'), ne(parameters.testScope, 'all')) }}:
- job: LinuxNoTest
displayName: Build
strategy:
matrix:
wasm_Release:
_BuildConfig: Release
_architecture: wasm
_framework: netcoreapp
_dockerContainer: ubuntu_1604
_emsdkPath: $(Build.BinariesDirectory)/emsdk
_buildScriptPrefix: 'EMSDK_PATH=$(_emsdkPath) '
_buildExtraArguments: -os WebAssembly -warnAsError false
_installEmscripten: true
# Only run these legs in PRs.
${{ if eq(parameters.fullMatrix, 'false') }}:
arm_Debug:
_BuildConfig: Debug
_architecture: arm
_framework: netcoreapp
_buildExtraArguments: /p:RuntimeOS=ubuntu.16.04 -warnAsError false
_buildScriptPrefix: 'ROOTFS_DIR=/crossrootfs/arm '
_dockerContainer: ubuntu_1604_arm_cross_container
musl_arm64_Debug:
_BuildConfig: Debug
_architecture: arm64
_framework: netcoreapp
_dockerContainer: alpine_37_arm64_container
_buildScriptPrefix: 'ROOTFS_DIR=/crossrootfs/arm64 '
_buildExtraArguments: -warnAsError false /p:RuntimeOS=linux-musl
arm64_Debug:
_BuildConfig: Debug
_architecture: arm64
_framework: netcoreapp
_dockerContainer: ubuntu_1604_arm64_cross_container
_buildScriptPrefix: 'ROOTFS_DIR=/crossrootfs/arm64 '
_buildExtraArguments: --warnAsError false
preBuildSteps:
- script: |
EMSCRIPTEN_VERSION=1.38.47
git clone https://github.com/emscripten-core/emsdk.git $(_emsdkPath)
cd $(_emsdkPath)
./emsdk install ${EMSCRIPTEN_VERSION}-upstream
./emsdk activate --embedded ${EMSCRIPTEN_VERSION}-upstream
displayName: Install Emscripten
condition: and(succeeded(), eq(variables['_installEmscripten'], 'true'))
pool:
name: Hosted Ubuntu 1604
container: $[ variables['_dockerContainer'] ]
buildExtraArguments: $(_buildExtraArguments)
buildScriptPrefix: $(_buildScriptPrefix)
submitToHelix: false

View File

@ -1,59 +0,0 @@
# macOS legs
parameters:
# Required: value to specify if the job is comming from an official build to run extra steps and sign binaries
# Default: false
isOfficialBuild: false
# Required: value to specify if the full test matrix should be tested
# Default: false
fullMatrix: false
# Optional: value to scope the tests.
# Default: empty
testScope: ''
stages:
- stage: MacOSStage
displayName: MacOS
dependsOn: []
jobs:
- template: corefx-base.yml
parameters:
isOfficialBuild: ${{ parameters.isOfficialBuild }}
testScope: ${{ parameters.testScope }}
targetOS: OSX
jobs:
# Legs with Helix testing
- job: MacOS
displayName: Build
strategy:
matrix:
${{ if eq(parameters.fullMatrix, 'false') }}:
x64_Debug:
_BuildConfig: Debug
_architecture: x64
_framework: netcoreapp
_helixQueues: $(macOSQueues)
${{ if eq(parameters.fullMatrix, 'true') }}:
x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netcoreapp
_helixQueues: $(macOSQueues)
_publishTests: true
pool:
name: Hosted macOS
preBuildSteps:
- script: |
brew install pkgconfig openssl
ln -s /usr/local/opt/openssl/lib/pkgconfig/libcrypto.pc /usr/local/lib/pkgconfig/
ln -s /usr/local/opt/openssl/lib/pkgconfig/libssl.pc /usr/local/lib/pkgconfig/
ln -s /usr/local/opt/openssl/lib/pkgconfig/openssl.pc /usr/local/lib/pkgconfig/
displayName: Install Build Dependencies
submitToHelix: true
variables:
- macOSQueues: OSX.1013.Amd64.Open+OSX.1014.Amd64.Open

View File

@ -6,52 +6,75 @@ schedules:
branches:
include:
- master
- release/3.0
resources:
containers:
- container: centos7_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-f39df28-20191023143754
- container: centos6_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-6-f39df28-20191023143802
- container: alpine_39_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.9-WithNode-0fc54a3-20190918214015
- container: alpine_37_arm64_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-alpine-406629a-20191023143847
- container: ubuntu_1604_arm64_cross_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-cfdd435-20191023143847
- container: ubuntu_1604_arm_cross_container
image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-14.04-23cacb0-20191023143847
- release/*.*
variables:
- template: variables.yml
stages:
# Windows outerloop legs
- ${{ if or(endsWith(variables['Build.DefinitionName'], 'windows'), endsWith(variables['Build.DefinitionName'], 'outerloop')) }}:
- template: windows.yml
parameters:
isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
testScope: outerloop
jobs:
- template: /eng/pipelines/common/checkout-job.yml
# Linux outerloop legs
- ${{ if or(endsWith(variables['Build.DefinitionName'], 'linux'), endsWith(variables['Build.DefinitionName'], 'outerloop')) }}:
- template: linux.yml
parameters:
isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/libraries/build-job.yml
buildConfig: Release
platforms:
- ${{ if eq(variables['includeWindowsOuterloop'], true) }}:
- Windows_NT_x86
- ${{ if eq(variables['isFullMatrix'], true) }}:
- Windows_NT_x64
- ${{ if eq(variables['includeLinuxOuterloop'], true) }}:
- Linux_rhel6_x64
- ${{ if eq(variables['isFullMatrix'], true) }}:
- Linux_x64
- Linux_arm
- Linux_arm64
- Linux_musl_x64
- Linux_musl_arm64
- ${{ if and(eq(variables['includeOsxOuterloop'], true), eq(variables['isFullMatrix'], true)) }}:
- OSX_x64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
isFullMatrix: ${{ variables['isFullMatrix'] }}
framework: netcoreapp
runTests: true
testScope: outerloop
- ${{ if eq(variables['isFullMatrix'], false) }}:
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/libraries/build-job.yml
buildConfig: Debug
platforms:
- ${{ if eq(variables['includeWindowsOuterloop'], true) }}:
- Windows_NT_x86
- ${{ if eq(variables['includeLinuxOuterloop'], true) }}:
- Linux_x64
- Linux_musl_x64
- ${{ if eq(variables['includeOsxOuterloop'], true) }}:
- OSX_x64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
isFullMatrix: ${{ variables['isFullMatrix'] }}
framework: netcoreapp
runTests: true
testScope: outerloop
# MacOS outerloop legs
- ${{ if or(endsWith(variables['Build.DefinitionName'], 'osx'), endsWith(variables['Build.DefinitionName'], 'outerloop')) }}:
- template: macos.yml
- ${{ if eq(variables['includeWindowsOuterloop'], true) }}:
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
isOfficialBuild: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
fullMatrix: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
testScope: outerloop
jobTemplate: /eng/pipelines/libraries/build-job.yml
buildConfig: Release
platforms:
- Windows_NT_x86
- ${{ if eq(variables['isFullMatrix'], true) }}:
- Windows_NT_x64
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
jobParameters:
isOfficialBuild: ${{ variables['isOfficialBuild'] }}
isFullMatrix: ${{ variables['isFullMatrix'] }}
framework: netfx
runTests: true
testScope: outerloop

View File

@ -1,88 +0,0 @@
parameters:
buildConfiguration: Release
dependsOn: []
stages:
- stage: PrePublish
displayName: Pre-publish
dependsOn: ${{ parameters.dependsOn }}
jobs:
- template: /eng/common/templates/jobs/jobs.yml
parameters:
enableMicrobuild: true
enablePublishUsingPipelines: $(_PublishUsingPipelines)
enablePublishBuildAssets: true
enablePublishBuildArtifacts: true
jobs:
- job: SignAndPrepare
displayName: Sign and prepare to publish
timeoutInMinutes: 160
pool:
name: NetCoreInternal-Pool
queue: buildpool.windows.10.amd64.vs2017
workspace:
clean: all
variables:
- group: DotNet-Versions-Publish
- _artifactsDir: $(Build.SourcesDirectory)/artifacts
- _TeamName: DotNetCore
- _SignType: real
- _BuildConfig: ${{ parameters.buildConfiguration }}
steps:
- powershell: |
$prefix = "refs/heads/"
$branch = "$(Build.SourceBranch)"
$branchName = $branch
if ($branchName.StartsWith($prefix))
{
$branchName = $branchName.Substring($prefix.Length)
}
Write-Host "For Build.SourceBranch $branch, FullBranchName is $branchName"
Write-Host "##vso[task.setvariable variable=FullBranchName;]$branchName"
displayName: Find true SourceBranchName
- task: DownloadBuildArtifacts@0
displayName: Download packages to publish
inputs:
artifactName: packages
downloadPath: $(_artifactsDir)
- script: $(buildScriptFileName).cmd
-restore
-ci
displayName: Restore tools
- script: $(buildScriptFileName).cmd
-sign
-ci
-configuration $(_BuildConfig)
/p:DotNetSignType=$(_SignType)
/p:OfficialBuildId=$(Build.BuildNumber)
displayName: Sign packages
- script: $(buildScriptFileName).cmd
-publish
-ci
-configuration $(_BuildConfig)
/p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines)
/p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory)
/p:DotNetPublishBlobFeedUrl=$(_dotnetFeedUrl)
/p:DotNetPublishToBlobFeed=true
/p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1)
/p:OfficialBuildId=$(Build.BuildNumber)
/bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/PublishToArtifacts.binlog
displayName: Publish to artifacts and produce manifest
- script: powershell -ExecutionPolicy ByPass -NoProfile eng\common\msbuild.ps1 $(sourcesRoot)/build.proj
-warnaserror:0 -ci
/t:UpdatePublishedVersions
/p:GitHubAuthToken=$(AccessToken-dotnet-build-bot-public-repo)
/p:VersionsRepoOwner=dotnet
/p:VersionsRepo=versions
/p:VersionsRepoPath=build-info/dotnet/corefx/$(FullBranchName)
/p:ShippedNuGetPackageGlobPath=$(_artifactsDir)/packages/**/*.nupkg
displayName: Update dotnet/versions

View File

@ -0,0 +1,64 @@
parameters:
buildConfig: ''
osGroup: ''
osSubgroup: ''
archType: ''
framework: netcoreapp
isOfficialBuild: false
timeoutInMinutes: 150
pool: ''
testScope: ''
helixQueues: []
dependsOnBuildConfiguration: Debug
variables: {}
jobs:
- template: /eng/pipelines/libraries/base-job.yml
parameters:
buildConfig: ${{ parameters.buildConfig }}
osGroup: ${{ parameters.osGroup }}
osSubgroup: ${{ parameters.osSubgroup }}
archType: ${{ parameters.archType }}
framework: ${{ parameters.framework }}
isOfficialBuild: ${{ parameters.isOfficialBuild }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
container: '' # we just send to helix, no need to use a container.
pool: ${{ parameters.pool }}
stepName: Run
dependsOn:
- ${{ format('libraries_Build_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
- ${{ format('libraries_Test_{0}_{1}_x64_{2}', parameters.framework, parameters.osGroup, parameters.dependsOnBuildConfiguration) }}
variables:
- _archiveTestsParameter: /p:ArchiveTests=true
- _skipTestRestoreArg: /p:SkipTestRestore=false
- ${{ parameters.variables }}
steps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
displayName: Build Assets
artifactName: ${{ format('libraries_bin_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
artifactFileName: ${{ format('libraries_bin_{0}_{1}{2}_{3}_{4}', parameters.framework, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
displayName: Test Assets
cleanUnpackFolder: false
unpackFolder: $(Build.SourcesDirectory)/artifacts
artifactName: ${{ format('libraries_test_assets_{0}_{1}_x64_{2}', parameters.framework, parameters.osGroup, parameters.dependsOnBuildConfiguration) }}
artifactFileName: ${{ format('libraries_test_assets_{0}_{1}_x64_{2}', parameters.framework, parameters.osGroup, parameters.dependsOnBuildConfiguration) }}$(archiveExtension)
- template: /eng/pipelines/libraries/helix.yml
parameters:
targetOS: ${{ parameters.osGroup }}
archGroup: ${{ parameters.archType }}
configuration: ${{ parameters.buildConfig }}
helixQueues: ${{ join('+', parameters.helixQueues) }}
msbuildScript: $(_msbuildCommand)
framework: ${{ parameters.framework }}
testScope: ${{ parameters.testScope }}
creator: dotnet-bot
helixToken: ''

View File

@ -5,3 +5,13 @@ variables:
value: $(Build.SourcesDirectory)/src/libraries
- name: pipelinesPath
value: /eng/pipelines/libraries
- name: isOfficialBuild
value: ${{ and(ne(variables['System.TeamProject'], 'public'), notIn(variables['Build.Reason'], 'PullRequest')) }}
- name: isFullMatrix
value: ${{ notIn(variables['Build.Reason'], 'PullRequest') }}
- name: includeWindowsOuterloop
value: ${{ or(endsWith(variables['Build.DefinitionName'], 'windows'), endsWith(variables['Build.DefinitionName'], 'outerloop')) }}
- name: includeLinuxOuterloop
value: ${{ or(endsWith(variables['Build.DefinitionName'], 'linux'), endsWith(variables['Build.DefinitionName'], 'outerloop')) }}
- name: includeOsxOuterloop
value: ${{ or(endsWith(variables['Build.DefinitionName'], 'osx'), endsWith(variables['Build.DefinitionName'], 'outerloop')) }}

View File

@ -1,162 +0,0 @@
# Windows legs
parameters:
# Required: value to specify if the job is comming from an official build to run extra steps and sign binaries
# Default: false
isOfficialBuild: false
# Required: value to specify if the full test matrix should be tested
# Default: false
fullMatrix: false
# Optional: value to scope the tests.
# Default: empty
testScope: ''
stages:
- stage: WindowsStage
displayName: Windows
dependsOn: []
jobs:
- template: corefx-base.yml
parameters:
isOfficialBuild: ${{ parameters.isOfficialBuild }}
testScope: ${{ parameters.testScope }}
targetOS: Windows_NT
jobs:
# Legs with Helix testing
- job: WindowsTest
displayName: Build
strategy:
matrix:
# PR CI Matrix
${{ if eq(parameters.fullMatrix, 'false') }}:
x64_Debug:
_BuildConfig: Debug
_architecture: x64
_framework: netcoreapp
_helixQueues: $(netcoreappWindowsQueues)+$(nanoQueues)
x86_Release:
_BuildConfig: Release
_architecture: x86
_framework: netcoreapp
_helixQueues: $(netcoreappWindowsQueues)
NETFX_x86_Release:
_BuildConfig: Release
_architecture: x86
_framework: netfx
_helixQueues: $(netFxQueues)
# Full test matrix
${{ if eq(parameters.fullMatrix, 'true') }}:
x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netcoreapp
_helixQueues: $(netcoreappWindowsQueues)+$(nanoQueues)
_publishTests: true
x86_Release:
_BuildConfig: Release
_architecture: x86
_framework: netcoreapp
_helixQueues: $(netcoreappWindowsQueues)
_publishTests: true
NETFX_x86_Release:
_BuildConfig: Release
_architecture: x86
_framework: netfx
_helixQueues: $(netFxQueues)
_skipPublishPackages: true # In NETFX leg we don't produce packages
NETFX_x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: netfx
_helixQueues: $(netFxQueues)
_skipPublishPackages: true # In NETFX leg we don't produce packages
pool:
name: Hosted VS2017
submitToHelix: true
buildExtraArguments: /p:RuntimeOS=win10
variables:
- nanoQueues: "`(Windows.Nano.1809.Amd64.Open`)windows.10.amd64.serverrs5.open@mcr.microsoft.com/dotnet-buildtools/prereqs:nanoserver-1809-helix-amd64-61052b7-20190723211353"
- netFxQueues: Windows.10.Amd64.Client19H1.Open
- ${{ if eq(parameters.fullMatrix, 'false') }}:
- netcoreappWindowsQueues: Windows.7.Amd64.Open+Windows.81.Amd64.Open+Windows.10.Amd64.Server19H1.ES.Open
- ${{ if eq(parameters.fullMatrix, 'true') }}:
- netcoreappWindowsQueues: Windows.7.Amd64.Open+Windows.81.Amd64.Open+Windows.10.Amd64.ServerRS5.Open+Windows.10.Amd64.Server19H1.Open
# There is no point of running legs without outerloop tests, when in an outerloop build.
- ${{ if and(ne(parameters.testScope, 'outerloop'), ne(parameters.testScope, 'all')) }}:
# Packaging all configurations
- job: AllConfigurations
displayName: Packaging All Configurations
strategy:
matrix:
${{ if eq(parameters.fullMatrix, 'false') }}:
x64_Debug:
_BuildConfig: Debug
_architecture: x64
_framework: allConfigurations
_helixQueues: $(allConfigurationsQueues)
${{ if eq(parameters.fullMatrix, 'true') }}:
x64_Release:
_BuildConfig: Release
_architecture: x64
_framework: allConfigurations
_helixQueues: $(allConfigurationsQueues)
pool:
name: Hosted VS2017
submitToHelix: true
buildExtraArguments: /p:RuntimeOS=win10
variables:
- allConfigurationsQueues: Windows.10.Amd64.Server19H1.Open
frameworkArg: -allConfigurations
customBuildSteps:
- script: $(buildScriptFileName).cmd
-build
-configuration $(_BuildConfig)
-ci
-buildtests
-allconfigurations
-arch $(_architecture)
/p:RuntimeOS=win10
/p:ArchiveTests=true
$(_msbuildCommonParameters)
displayName: Build Packages and Tests
# Legs without HELIX testing
- ${{ if eq(parameters.fullMatrix, 'true') }}:
- job: WindowsNoTest
displayName: Build
strategy:
matrix:
arm_Release:
_BuildConfig: Release
_architecture: arm
_framework: netcoreapp
arm64_Release:
_BuildConfig: Release
_architecture: arm64
_framework: netcoreapp
_publishTests: true
pool:
name: Hosted VS2017
submitToHelix: false
buildExtraArguments: /p:RuntimeOS=win10

View File

@ -3,13 +3,13 @@
<IsReferenceAssembly Condition="'$(IsReferenceAssembly)' == '' and ($(MSBuildProjectFullPath.Contains('\ref\')) or $(MSBuildProjectFullPath.Contains('/ref/')))">true</IsReferenceAssembly>
<!-- Create a common root output directory for all reference assemblies -->
<ReferenceAssemblyOutputPath Condition="'$(ReferenceAssemblyOutputPath)' == ''">$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'ref'))</ReferenceAssemblyOutputPath>
<ReferenceAssemblyOutputPath Condition="'$(ReferenceAssemblyOutputPath)' == ''">$([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', '$(MSBuildProjectName)'))</ReferenceAssemblyOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(IsReferenceAssembly)' == 'true'">
<BaseOutputPath>$([MSBuild]::NormalizeDirectory('$(ReferenceAssemblyOutputPath)', '$(MSBuildProjectName)'))</BaseOutputPath>
<BaseOutputPath>$([MSBuild]::NormalizeDirectory('$(ReferenceAssemblyOutputPath)', 'ref'))</BaseOutputPath>
<OutputPath>$(BaseOutputPath)$(Configuration)</OutputPath>
<BaseIntermediateOutputPath>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'ref', '$(MSBuildProjectName)'))</BaseIntermediateOutputPath>
<BaseIntermediateOutputPath>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', '$(MSBuildProjectName)', 'ref'))</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)</IntermediateOutputPath>
<!-- disable warnings about unused fields -->

View File

@ -1,66 +0,0 @@
<Project DefaultTargets="PublishTestAssets">
<Import Project="$(MSBuildThisFileDirectory)Directory.Build.props" />
<!-- We need to import Directory.Build.targets at the beginning because there is where we import the restored tools targets, in
this case we need Microsoft.DotNet.Build.Tasks.Feed targets to be imported. -->
<Import Project="$(MSBuildThisFileDirectory)Directory.Build.targets" />
<PropertyGroup>
<AssetManifestDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'TestAssetsManifests'))</AssetManifestDir>
<AssetManifestFilePath>$(AssetManifestDir)$(AssetManifestFileName)</AssetManifestFilePath>
</PropertyGroup>
<Target Name="PublishTestAssets">
<Error Text="The ExpectedFeedUrl property wasn't supplied." Condition="'$(ExpectedFeedUrl)' == ''" />
<Error Text="The AccountKey property wasn't supplied." Condition="'$(AccountKey)' == ''" />
<Error Text="FilesToPublishPattern property wasn't supplied." Condition="'$(FilesToPublishPattern)' == ''" />
<PropertyGroup>
<_TestAssetVersion>$(PackageVersion)-$(VersionSuffix)</_TestAssetVersion>
<_FileRelativePathBase>corefx-tests/$(_TestAssetVersion)/$(OSGroup).$(ArchGroup)/$(TargetGroup)/</_FileRelativePathBase>
</PropertyGroup>
<ItemGroup>
<_ItemsToPush Remove="@(_ItemsToPush)" />
<_ItemsToPush Include="$(FilesToPublishPattern)" />
<_ItemsToPush>
<RelativeBlobPath>$(_FileRelativePathBase)$([System.String]::Copy('%(RecursiveDir)%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
</_ItemsToPush>
</ItemGroup>
<Error Condition="'@(_ItemsToPush)' == ''" Text="No files to push." />
<PushToBlobFeed ExpectedFeedUrl="$(ExpectedFeedUrl)"
AccountKey="$(AccountKey)"
ItemsToPush="@(_ItemsToPush)"
PublishFlatContainer="true"
ManifestBuildId="$(ManifestBuildId)"
ManifestBranch="$(ManifestBranch)"
ManifestCommit="$(ManifestCommit)"
ManifestBuildData="$(ManifestBuildData)"
ManifestRepoUri="$(ManifestRepoUri)"
AssetManifestPath="$(AssetManifestFilePath)"
Overwrite="true" />
<ItemGroup>
<_ManifestToPush Remove="@(_ManifestToPush)" />
<_ManifestToPush Include="$(AssetManifestFilePath)">
<RelativeBlobPath>$(_FileRelativePathBase)$(AssetManifestFileName)</RelativeBlobPath>
</_ManifestToPush>
</ItemGroup>
<Message Importance="High" Text="PublishTestAssets: $(_FileRelativePathBase)$(AssetManifestFileName)" />
<PushToBlobFeed ExpectedFeedUrl="$(ExpectedFeedUrl)"
AccountKey="$(AccountKey)"
ItemsToPush="@(_ManifestToPush)"
PublishFlatContainer="true"
ManifestBuildId="$(ManifestBuildId)"
ManifestBranch="$(ManifestBranch)"
ManifestCommit="$(ManifestCommit)"
ManifestBuildData="$(ManifestBuildData)"
ManifestRepoUri="$(ManifestRepoUri)"
AssetManifestPath="$(AssetManifestDir)ManifestUpload.xml"
Overwrite="true" />
</Target>
</Project>

View File

@ -10,8 +10,9 @@
<ItemGroup Condition="'$(BuildAllConfigurations)' != 'true'">
<!-- We currently only test with C# projects. -->
<Project Condition="'$(DirectoryToBuild)' == ''" Include="$(MSBuildThisFileDirectory)*\tests\**\*.Tests.csproj" Exclude="@(ProjectExclusions)" />
<Project Condition="'$(DirectoryToBuild)' != ''" Include="$(DirectoryToBuild)\**\*.Tests.csproj" />
<Project Condition="'$(SkipTestRestore)' != 'true' and '$(DirectoryToBuild)' == ''" Include="$(MSBuildThisFileDirectory)*\tests\**\*.Tests.csproj" Exclude="@(ProjectExclusions)" />
<Project Condition="'$(SkipTestRestore)' == 'true' and '$(DirectoryToBuild)' == ''" Include="$(CommonTestPath)CoreFx.Private.TestUtilities\CoreFx.Private.TestUtilities.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(BuildAllConfigurations)' == 'true'">