parameters: # Agent OS identifier and used as job name agentOs: '' # Agent pool pool: {} # Additional variables variables: {} # Build strategy - matrix strategy: {} # Job timeout timeoutInMinutes: 180 # Publish using pipelines enablePublishUsingPipelines: true phases: - template: /eng/common/templates/job/job.yml parameters: ${{ if parameters.pgoInstrument }}: name: PGO_${{ parameters.agentOs }} ${{ if not(parameters.pgoInstrument) }}: name: ${{ parameters.agentOs }} timeoutInMinutes: ${{ parameters.timeoutInMinutes }} ${{ if eq(parameters.agentOs, 'Windows_NT') }}: enableMicrobuild: true enablePublishBuildAssets: true # Don't use built-in arcade logic for publishing artifacts and test results, as we manually do this and give better names #enablePublishBuildArtifacts: true #enablePublishTestResults: true enablePublishUsingPipelines: ${{parameters.enablePublishUsingPipelines}} enableTelemetry: true helixRepo: dotnet/installer pool: ${{ parameters.pool }} ${{ if ne(parameters.strategy, '') }}: strategy: ${{ parameters.strategy }} workspace: clean: all variables: - _PgoInstrument: '' - ${{ if eq(parameters.agentOs, 'Windows_NT') }}: - _PackArg: '-pack' - ${{ if ne(parameters.agentOs, 'Windows_NT') }}: - _PackArg: '--pack' - ${{ if parameters.pgoInstrument }}: - _PgoInstrument: '/p:PgoInstrument=true' - _PackArg: '' - _AgentOSName: ${{ parameters.agentOs }} - _TeamName: Roslyn-Project-System - _SignType: test - _BuildArgs: '/p:DotNetSignType=$(_SignType) $(_PgoInstrument)' - _DOTNETCLIMSRC_READ_SAS_TOKEN: '' - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - group: DotNet-MSRC-Storage - _DOTNETCLIMSRC_READ_SAS_TOKEN: $(dotnetclimsrc-read-sas-token) - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - group: DotNet-Symbol-Server-PATs - group: DotNet-HelixApi-Access - group: DotNet-Blob-Feed - _DotNetPublishToBlobFeed: true - _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 $(_BuildConfig) -Architecture $(_BuildArchitecture) $(_BuildArgs) $(_AdditionalBuildParameters) displayName: Build env: DOTNET_CLI_UI_LANGUAGE: $(_DOTNET_CLI_UI_LANGUAGE) DOTNETCLIMSRC_READ_SAS_TOKEN: $(_DOTNETCLIMSRC_READ_SAS_TOKEN) - ${{ 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 $(_BuildConfig) $(_DockerParameter) --architecture $(_BuildArchitecture) $(_LinuxPortable) $(_RuntimeIdentifier) $(_BuildArgs) $(_AdditionalBuildParameters) displayName: Build env: DOTNETCLIMSRC_READ_SAS_TOKEN: $(_DOTNETCLIMSRC_READ_SAS_TOKEN) - ${{ if or(eq(parameters.agentOs, 'Darwin'), eq(parameters.agentOs, 'FreeBSD')) }}: - script: ./build.sh $(_TestArg) --pack --publish --ci --noprettyprint --configuration $(_BuildConfig) --architecture $(_BuildArchitecture) $(_RuntimeIdentifier) $(_BuildArgs) $(_AdditionalBuildParameters) displayName: Build env: DOTNETCLIMSRC_READ_SAS_TOKEN: $(_DOTNETCLIMSRC_READ_SAS_TOKEN) - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.agentOs, 'Windows_NT'), ne(variables['PostBuildSign'], 'true')) }}: - task: NuGetCommand@2 displayName: Push Visual Studio NuPkgs inputs: command: push packagesToPush: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/NonShipping/VS.*.nupkg' nuGetFeedType: external publishFeedCredentials: 'DevDiv - VS package feed' condition: and(succeeded(), ne(variables['PostBuildSign'], true), eq(variables['_PushToVSFeed'], 'true'), eq(variables['_DotNetPublishToBlobFeed'], 'true'), or(eq(variables['_BuildArchitecture'], 'x64'), eq(variables['_BuildArchitecture'], 'x86'))) - task: PublishTestResults@2 displayName: Publish Test Results inputs: testRunner: XUnit testResultsFiles: 'artifacts/TestResults/$(_BuildConfig)/*.xml' testRunTitle: '$(_AgentOSName)_$(Agent.JobName)' platform: '$(BuildPlatform)' configuration: '$(_BuildConfig)' condition: ne(variables['_TestArg'], '') - task: CopyFiles@2 displayName: Gather Logs inputs: SourceFolder: '$(Build.SourcesDirectory)/artifacts' Contents: | log/$(_BuildConfig)/**/* TestResults/$(_BuildConfig)/**/* 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()