parameters: # Agent OS identifier and used as job name - name: agentOs type: string # Job name - name: jobName type: string # Container to run the build in, if any - name: container type: string default: '' # Job timeout - name: timeoutInMinutes type: number default: 180 # Build configuration (Debug, Release) - name: buildConfiguration type: string values: - Debug - Release # Build architecture - name: buildArchitecture type: string values: - arm - arm64 - x64 - x86 # Linux portable. If true, passes portable switch to build - name: linuxPortable type: boolean default: false # Runtime Identifier - name: runtimeIdentifier type: string default: '' # UI lang - name: dotnetCLIUILanguage type: string default: '' # Additional parameters - name: additionalBuildParameters type: string default: '' # Run tests - name: runTests type: boolean default: true # PGO instrumentation jobs - name: pgoInstrument type: boolean default: false jobs: - template: /eng/common/templates/job/job.yml parameters: # Set up the name of the job. ${{ if parameters.pgoInstrument }}: name: PGO_${{ parameters.agentOs }}_${{ parameters.jobName }} ${{ if not(parameters.pgoInstrument) }}: name: ${{ parameters.agentOs }}_${{ parameters.jobName }} ## Set up the pool/machine info to be used based on the Agent OS ${{ if eq(parameters.agentOs, 'Windows_NT') }}: enableMicrobuild: true pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: NetCore-Public demands: ImageOverride -equals build.windows.10.amd64.vs2019.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals build.windows.10.amd64.vs2019 ${{ if eq(parameters.agentOs, 'Linux') }}: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: NetCore-Public demands: ImageOverride -equals Build.Ubuntu.1804.Amd64.Open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: NetCore1ESPool-Internal demands: ImageOverride -equals Build.Ubuntu.1804.Amd64 container: ${{ parameters.container }} ${{ if eq(parameters.agentOs, 'Darwin') }}: pool: vmImage: 'macOS-latest' timeoutInMinutes: ${{ parameters.timeoutInMinutes }} enablePublishBuildAssets: true enablePublishUsingPipelines: true enableTelemetry: true helixRepo: dotnet/installer workspace: clean: all # Test parameters variables: - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - _PackArg: '-pack' - ${{ if parameters.runTests }}: - _TestArg: '-test' - ${{ else }}: - _TestArg: '' - ${{ if ne(parameters.agentOs, 'Windows_NT') }}: - _PackArg: '--pack' - ${{ if parameters.runTests }}: - _TestArg: '--test' - ${{ else }}: - _TestArg: '' - ${{ if parameters.pgoInstrument }}: - _PgoInstrument: '/p:PgoInstrument=true' - _PackArg: '' - ${{ else }}: - _PgoInstrument: '' - ${{ if parameters.linuxPortable }}: - _LinuxPortable: '--linux-portable' - ${{ else }}: - _LinuxPortable: '' - ${{ if ne(parameters.runtimeIdentifier, '') }}: - _RuntimeIdentifier: '--runtime-id ${{ parameters.runtimeIdentifier }}' - ${{ else }}: - _RuntimeIdentifier: '' - _AgentOSName: ${{ parameters.agentOs }} - _TeamName: Roslyn-Project-System - _SignType: test - _BuildArgs: '/p:DotNetSignType=$(_SignType) $(_PgoInstrument)' - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - group: DotNet-HelixApi-Access - _PushToVSFeed: true - _SignType: real - _BuildArgs: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) $(_PgoInstrument) steps: - checkout: self clean: true - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: PowerShell@2 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) - script: build.cmd $(_TestArg) $(_PackArg) -publish -ci -sign -Configuration ${{ parameters.buildConfiguration }} -Architecture ${{ parameters.buildArchitecture }} $(_BuildArgs) ${{ parameters.additionalBuildParameters }} $(_InternalRuntimeDownloadArgs) displayName: Build env: DOTNET_CLI_UI_LANGUAGE: ${{ parameters.dotnetCLIUILanguage }} - ${{ if ne(parameters.agentOs, 'Windows_NT') }}: - ${{ if ne(variables['System.TeamProject'], 'public') }}: - task: Bash@3 displayName: Setup Private Feeds Credentials inputs: filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh arguments: $(Build.SourcesDirectory)/NuGet.config $Token env: Token: $(dn-bot-dnceng-artifact-feeds-rw) - ${{ if eq(parameters.agentOs, 'Linux') }}: - script: ./build.sh $(_TestArg) $(_PackArg) --publish --ci --noprettyprint --configuration ${{ parameters.buildConfiguration }} --architecture ${{ parameters.buildArchitecture }} $(_LinuxPortable) $(_RuntimeIdentifier) $(_BuildArgs) ${{ parameters.additionalBuildParameters }} $(_InternalRuntimeDownloadArgs) displayName: Build - ${{ if or(eq(parameters.agentOs, 'Darwin'), eq(parameters.agentOs, 'FreeBSD')) }}: - script: ./build.sh $(_TestArg) --pack --publish --ci --noprettyprint --configuration ${{ parameters.buildConfiguration }} --architecture ${{ parameters.buildArchitecture }} $(_RuntimeIdentifier) $(_BuildArgs) ${{ parameters.additionalBuildParameters }} $(_InternalRuntimeDownloadArgs) displayName: Build # In general, only push VS nupkgs if post-build signing is off, and this is not a PR - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), ne(variables['PostBuildSign'], 'true')) }}: # In addition, restrict to just Windows x86 or x64 builds (other windows builds do not produce VS redist packages.) - ${{ if and(eq(parameters.agentOs, 'Windows_NT'), in(parameters.buildArchitecture, 'x64', 'x86')) }}: - task: NuGetCommand@2 displayName: Push Visual Studio NuPkgs inputs: command: push packagesToPush: '$(Build.SourcesDirectory)/artifacts/packages/${{ parameters.buildConfiguration }}/NonShipping/VS.*.nupkg' nuGetFeedType: external publishFeedCredentials: 'DevDiv - VS package feed' - task: PublishTestResults@2 displayName: Publish Test Results inputs: testRunner: XUnit testResultsFiles: 'artifacts/TestResults/${{ parameters.buildConfiguration }}/*.xml' testRunTitle: '$(_AgentOSName)_$(Agent.JobName)' platform: '$(BuildPlatform)' configuration: '${{ parameters.buildConfiguration }}' condition: ne(variables['_TestArg'], '') - task: CopyFiles@2 displayName: Gather Logs inputs: SourceFolder: '$(Build.SourcesDirectory)/artifacts' Contents: | log/${{ parameters.buildConfiguration }}/**/* TestResults/${{ parameters.buildConfiguration }}/**/* TargetFolder: '$(Build.ArtifactStagingDirectory)' continueOnError: true condition: always() - task: PublishBuildArtifacts@1 displayName: Publish Logs to VSTS inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)' publishLocation: Container continueOnError: true condition: always()