# default-build.yml # Description: Defines a build phase for invoking build.sh/cmd # Parameters: # jobName: string # The name of the job. Defaults to the name of the OS. No spaces allowed # jobDisplayName: string # The friendly job name to display in the UI. Defaults to the name of the OS. # poolName: string # The name of the VSTS agent queue to use. # agentOs: string # Used in templates to define variables which are OS specific. Typically from the set { Windows, Linux, macOS } # buildArgs: string # Additional arguments to pass to the build.sh/cmd script. # Note: -ci is always passed # beforeBuild: [steps] # Additional steps to run before build.sh/cmd # afterBuild: [steps] # Additional steps to run after build.sh/cmd # artifacts: # publish: boolean # Should artifacts be published # path: string # The file path to artifacts output # name: string # The name of the artifact container # variables: { string: string } # A map of custom variables # matrix: { string: { string: string } } # A map of matrix configurations and variables. https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema?view=vsts#matrix # demands: string | [ string ] # A list of agent demands. https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema?view=vsts#demands # dependsOn: string | [ string ] # For fan-out/fan-in. https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema?view=vsts#phase # codeSign: boolean # This build definition is enabled for code signing. (Only applies to Windows) # buildDirectory: string # Specifies what directory to run build.sh/cmd # # See https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema for details # parameters: agentOs: 'Windows' poolName: '' buildArgs: '' configuration: 'Release' demands: [] beforeBuild: [] afterBuild: [] codeSign: false variables: {} dependsOn: '' # jobName: '' - use agentOs by default. # jobDisplayName: '' - use agentOs by default. # matrix: {} - don't define an empty object default because there is no way in template expression yet to check "if isEmpty(parameters.matrix)" artifacts: publish: true path: 'artifacts/' buildDirectory: '' jobs: - job: ${{ coalesce(parameters.jobName, parameters.agentOs) }} displayName: ${{ coalesce(parameters.jobDisplayName, parameters.agentOs) }} dependsOn: ${{ parameters.dependsOn }} timeoutInMinutes: 120 workspace: clean: all strategy: ${{ if ne(parameters.matrix, '') }}: maxParallel: 8 matrix: ${{ parameters.matrix }} # Map friendly OS names to the right queue pool: ${{ if ne(parameters.poolName, '') }}: name: ${{ parameters.poolName }} ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'macOS')) }}: name: Hosted macOS vmImage: macOS-10.13 ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'Linux')) }}: name: Hosted Ubuntu 1604 vmImage: ubuntu-16.04 ${{ if and(eq(parameters.poolName, ''), eq(parameters.agentOs, 'Windows')) }}: ${{ if ne(parameters.codeSign, 'true') }}: name: Hosted VS2017 vmImage: vs2017-win2016 ${{ if eq(parameters.codeSign, 'true') }}: name: DotNetCore-Windows variables: AgentOsName: ${{ parameters.agentOs }} ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping DOTNET_HOME: $(Agent.WorkFolder)/.dotnet BuildScriptArgs: ${{ parameters.buildArgs }} BuildConfiguration: ${{ parameters.configuration }} BuildDirectory: ${{ parameters.buildDirectory }} VSTS_OVERWRITE_TEMP: false # Workaround for https://github.com/dotnet/core-eng/issues/2812 ${{ if eq(parameters.codeSign, 'true') }}: TeamName: AspNetCore _SignType: real ${{ if ne(parameters.codeSign, 'true') }}: _SignType: ${{ insert }}: ${{ parameters.variables }} steps: - checkout: self clean: true - task: NodeTool@0 displayName: Install Node 10.x inputs: versionSpec: 10.x - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}: - task: MicroBuildSigningPlugin@1 displayName: Install MicroBuild Signing plugin condition: and(succeeded(), in(variables['_SignType'], 'test', 'real')) inputs: signType: $(_SignType) zipSources: false - ${{ parameters.beforeBuild }} - ${{ if eq(parameters.agentOs, 'Windows') }}: - script: .\$(BuildDirectory)\build.cmd -ci /p:SignType=$(_SignType) /p:Configuration=$(BuildConfiguration) $(BuildScriptArgs) displayName: Run build.cmd - ${{ if ne(parameters.agentOs, 'Windows') }}: - script: ./$(BuildDirectory)/build.sh -ci -p:Configuration=$(BuildConfiguration) $(BuildScriptArgs) displayName: Run build.sh - task: PublishTestResults@2 displayName: Publish test results condition: always() inputs: testRunTitle: $(AgentOsName)-$(BuildConfiguration) testRunner: vstest testResultsFiles: '**/artifacts/**/*.trx' mergeTestResults: true - ${{ if eq(parameters.artifacts.publish, 'true') }}: - task: PublishBuildArtifacts@1 displayName: Upload artifacts condition: eq(variables['system.pullrequest.isfork'], false) inputs: ${{ if eq(parameters.buildDirectory, '') }}: pathtoPublish: ${{ parameters.artifacts.path }} ${{ if ne(parameters.artifacts.name, '') }}: pathtoPublish: ${{ parameters.buildDirectory }}\${{ parameters.artifacts.path }} ${{ if eq(parameters.artifacts.name, '') }}: artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration) ${{ if ne(parameters.artifacts.name, '') }}: artifactName: ${{ parameters.artifacts.name }} artifactType: Container parallel: true - ${{ parameters.afterBuild }} - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}: - task: MicroBuildCleanup@1 displayName: Cleanup MicroBuild tasks condition: always()