text: #
  # Obsolete! New projects should use .azure/templates/jobs/default-build.yml instead
  #
  # TODO: remove this once templated projects have referenced the new location.
  #
  # default-build.yml
  # Description: Defines a build phase for invoking build.sh/cmd
  # Parameters:
  #   phaseName: string
  #       The name of the phase. Defaults to the name of the OS.
  #   queueName: 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
  
  #
  # See https://docs.microsoft.com/en-us/vsts/pipelines/yaml-schema for details
  #
  
  parameters:
    agentOs: 'Windows'
    # phaseName: ''
    queueName: ''
    buildArgs: ''
    configuration: 'Release'
    demands: []
    beforeBuild: []
    afterBuild: []
    variables: {}
    dependsOn: ''
    # 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/'  # TODO: this is going to change when we converge with dotnet/arcade tooling
  
  phases:
  - phase: ${{ coalesce(parameters.phaseName, parameters.agentOs) }}
    dependsOn: ${{ parameters.dependsOn }}
    queue:
      # If a matrix of builds has been configured, run the matrix in parallel
      ${{ if ne(parameters.matrix, '') }}:
        parallel: 4 # Pick 4 as the default because we usually don't have a matrix of more than 4 configs, and there is no way to say parallel: all
        matrix: ${{ parameters.matrix }}
      # Map friendly OS names to the right queue
      ${{ if ne(parameters.queueName, '') }}:
        name: ${{ parameters.queueName }}
      ${{ if and(eq(parameters.queueName, ''), eq(parameters.agentOs, 'macOS')) }}:
        name: Hosted macOS Preview
      ${{ if and(eq(parameters.queueName, ''), eq(parameters.agentOs, 'Linux')) }}:
        name: Hosted Linux Preview
      ${{ if and(eq(parameters.queueName, ''), eq(parameters.agentOs, 'Windows')) }}:
        name: Hosted VS2017
      demands: ${{ parameters.demands }}
    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 }}
      ${{ insert }}: ${{ parameters.variables }}
    steps:
    - script: echo "This build template is obsolete and will be removed in the future. Please update your schema to use the  .azure/templates/jobs/default-build.yml template"
      displayName: THIS TEMPLATE IS OBSOLETE
    - checkout: self
      clean: true
    - ${{ parameters.beforeBuild }}
    - ${{ if eq(parameters.agentOs, 'Windows') }}:
      - script: .\buildWithProcDump.cmd -ci /p:Configuration=$(BuildConfiguration) $(BuildScriptArgs)
        displayName: Run build.cmd
    - ${{ if ne(parameters.agentOs, 'Windows') }}:
      - script: ./build.sh -ci -p:Configuration=$(BuildConfiguration) $(BuildScriptArgs)
        displayName: Run build.sh
    - task: PublishTestResults@2
      displayName: Publish test results
      condition: always()
      inputs:
        testRunner: vstest
        testResultsFiles: 'artifacts/logs/**/*.trx'
    - task: PublishTestResults@2
      displayName: Publish junit test results
      condition: always()
      inputs:
        testRunner: junit
        testResultsFiles: 'artifacts/logs/**/*.junit.xml'
    - ${{ if eq(parameters.artifacts.publish, 'true') }}:
      - task: PublishBuildArtifacts@1
        displayName: Upload artifacts
        condition: eq(variables['system.pullrequest.isfork'], false)
        inputs:
          pathtoPublish: ${{ parameters.artifacts.path }}
          ${{ if eq(parameters.artifacts.name, '') }}:
            artifactName: artifacts-$(AgentOsName)-$(BuildConfiguration)
          ${{ if ne(parameters.artifacts.name, '') }}:
            artifactName: ${{ parameters.artifacts.name }}
          artifactType: Container
    - ${{ parameters.afterBuild }}
  