trigger:
  batch: true
  branches:
    include:
    - main
    - release/9.0.1xx-preview*
    - internal/release/*
    - exp/*

pr:
  branches:
    include:
    - main
    - release/*
    - internal/release/*

variables:
  - name: teamName
    value: Roslyn-Project-System
  - name: _CIBuild
    value: -restore -build -sign -pack -ci
  - name: _DotNetArtifactsCategory
    value: .NETCore
  - name: _DotNetValidationArtifactsCategory
    value: .NETCore
  # Disable post-build signing for internal release-branch builds or internal manual builds.
  - ${{ if and(eq(variables['System.TeamProject'], 'internal'), or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'), eq(variables['Build.Reason'], 'Manual'))) }}:
    - name: PostBuildSign
      value: false
  - ${{ else }}:
    - name: PostBuildSign
      value: true
  - ${{ if eq(variables['System.TeamProject'], 'public') }}:
    - name: _InternalRuntimeDownloadArgs
      value: ''
    - name: _OfficialBuildArgs
      value: ''
    - name: "skipComponentGovernanceDetection"
      value: "true"
  - ${{ if ne(variables['System.TeamProject'], 'public') }}:
    - name: _OfficialBuildArgs
      value: /p:OfficialBuilder=Microsoft
    - name: Codeql.Enabled
      value: true
    - group: DotNetBuilds storage account read tokens
    - name: _InternalRuntimeDownloadArgs
      value: /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal 
        /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) 
  - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
    - group: DotNet-CLI-SDLValidation-Params
  - template: /eng/common/templates/variables/pool-providers.yml

stages:
- stage: build
  displayName: Build
  jobs:
  - job: Publish_Build_Configuration
    pool:
      ${{ if eq(variables['System.TeamProject'], 'public') }}:
        vmImage: 'windows-2019'
      ${{ if eq(variables['System.TeamProject'], 'internal') }}:
        name: $(DncEngInternalBuildPool)
        demands: ImageOverride -equals windows.vs2019.amd64
    steps:
      - publish: $(Build.SourcesDirectory)\eng\BuildConfiguration
        artifact: BuildConfiguration
        displayName: Publish Build Config
  - template: /eng/build-pr.yml
    parameters:
      agentOs: Windows_NT
      pool:
        ${{ if eq(variables['System.TeamProject'], 'public') }}:
          name: $(DncEngPublicBuildPool)
          demands: ImageOverride -equals 1es-windows-2022-open
        ${{ if ne(variables['System.TeamProject'], 'public') }}:
          name: $(DncEngInternalBuildPool)
          demands: ImageOverride -equals 1es-windows-2022
      ${{ if eq(variables['System.TeamProject'], 'public') }}:
        helixTargetQueue: Windows.Amd64.VS2022.Pre.Open
      ${{ if ne(variables['System.TeamProject'], 'public') }}:
        helixTargetQueue: Windows.Amd64.VS2022.Pre
      strategy:
        matrix:
          Build_Release:
            _BuildConfig: Release
            _PublishArgs: '-publish /p:DotNetPublishUsingPipelines=true'
            ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
              _SignType: test
              _Test: -test
            ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
              _SignType: real
              _Test: ''
  - template: /eng/common/templates/job/source-build.yml
    parameters:
      platform:
        name: 'Managed'
        container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9'
  - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
    - template: /eng/build-pr.yml
      parameters:
        agentOs: Windows_NT_FullFramework
        pool:
          ${{ if eq(variables['System.TeamProject'], 'public') }}:
            name: $(DncEngPublicBuildPool)
            demands: ImageOverride -equals 1es-windows-2022-open
          ${{ if ne(variables['System.TeamProject'], 'public') }}:
            name: $(DncEngInternalBuildPool)
            demands: ImageOverride -equals windows.vs2022preview.amd64
        ${{ if eq(variables['System.TeamProject'], 'public') }}:
          helixTargetQueue: Windows.Amd64.VS2022.Pre.Open
        ${{ if ne(variables['System.TeamProject'], 'public') }}:
          helixTargetQueue: Windows.Amd64.VS2022.Pre
        strategy:
          matrix:
            Build_Debug:
              _BuildConfig: Debug
              _PublishArgs: ''
              _SignType: test
              _Test: -test

    - template: /eng/build-pr.yml
      parameters:
        agentOs: Windows_NT_TestAsTools
        pool:
          ${{ if eq(variables['System.TeamProject'], 'public') }}:
            name: $(DncEngPublicBuildPool)
            demands: ImageOverride -equals 1es-windows-2022-open
          ${{ if ne(variables['System.TeamProject'], 'public') }}:
            name: $(DncEngInternalBuildPool)
            demands: ImageOverride -equals 1es-windows-2022
        strategy:
          matrix:
            Build_Debug:
              _BuildConfig: Debug
              _PublishArgs: ''
              _SignType: test

    - template: /eng/build-pr.yml
      parameters:
        agentOs: Ubuntu_22_04
        pool:
          ${{ if eq(variables['System.TeamProject'], 'public') }}:
            vmImage: 'ubuntu-22.04'
          ${{ if ne(variables['System.TeamProject'], 'public') }}:
            name: $(DncEngInternalBuildPool)
            demands: ImageOverride -equals build.ubuntu.2204.amd64
        ${{ if eq(variables['System.TeamProject'], 'public') }}:
          helixTargetQueue: ubuntu.2204.amd64.open
        ${{ if ne(variables['System.TeamProject'], 'public') }}:
          helixTargetQueue: Ubuntu.2204.Amd64
        strategy:
          matrix:
            Build_Release:
              _BuildConfig: Release
              _PublishArgs: ''
              _SignType: test
              _Test: -test

    - template: /eng/build-pr.yml
      parameters:
        agentOs: Darwin
        pool:
          vmImage: 'macOS-latest'
        ${{ if eq(variables['System.TeamProject'], 'public') }}:
          helixTargetQueue: OSX.13.Amd64.Open
        ${{ if ne(variables['System.TeamProject'], 'public') }}:
          helixTargetQueue: OSX.13.Amd64
        strategy:
          matrix:
            Build_Release:
              _BuildConfig: Release
              _PublishArgs: ''
              _SignType: test
              _Test: -test

  - template: /eng/template-engine.yml

  - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
    - template: /eng/common/templates/job/publish-build-assets.yml
      parameters:
        publishUsingPipelines: true
        publishAssetsImmediately: true
        dependsOn:
          - Windows_NT
          - Source_Build_Managed
        pool:
          name: $(DncEngInternalBuildPool)
          demands: ImageOverride -equals windows.vs2019.amd64
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
  - template: /eng/common/templates/post-build/post-build.yml
    parameters:
      publishingInfraVersion: 3
      enableSymbolValidation: false
      enableSigningValidation: false
      enableNugetValidation: false
      enableSourceLinkValidation: false
      publishInstallersAndChecksums: true
      publishAssetsImmediately: true
      SDLValidationParameters:
        enable: false
        params: ' -SourceToolsList @("policheck","credscan")
        -TsaInstanceURL $(_TsaInstanceURL)
        -TsaProjectName $(_TsaProjectName)
        -TsaNotificationEmail $(_TsaNotificationEmail)
        -TsaCodebaseAdmin $(_TsaCodebaseAdmin)
        -TsaBugAreaPath $(_TsaBugAreaPath)
        -TsaIterationPath $(_TsaIterationPath)
        -TsaRepositoryName "dotnet-sdk"
        -TsaCodebaseName "dotnet-sdk"
        -TsaPublish $True'
