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

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

variables:
  - name: _CIBuild
    value: -restore -build -sign -pack -ci
  # 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-official/variables/pool-providers.yml
  # Set the MicroBuild plugin installation directory to the agent temp directory to avoid SDL tool scanning.
  - name: MicroBuildOutputFolderOverride
    value: $(Agent.TempDirectory)

resources:
  repositories:
  - repository: 1esPipelines
    type: git
    name: 1ESPipelineTemplates/1ESPipelineTemplates
    ref: refs/tags/release

extends:
  template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines
  parameters:
    sdl:
      sourceAnalysisPool:
        name: $(DncEngInternalBuildPool)
        image: 1es-windows-2022
        os: windows
    stages:
    - stage: build
      displayName: Build
      jobs:
      - job: Publish_Build_Configuration
        pool:
          ${{ if eq(variables['System.TeamProject'], 'public') }}:
            name: $(DncEngPublicBuildPool)
            image: 1es-windows-2022-open
            os: windows
          ${{ if eq(variables['System.TeamProject'], 'internal') }}:
            name: $(DncEngInternalBuildPool)
            image: 1es-windows-2022
            os: windows
        steps:
          - task: 1ES.PublishPipelineArtifact@1
            displayName: Publish Build Config
            inputs:
              targetPath: $(Build.SourcesDirectory)\eng\buildConfiguration
              artifactName: buildConfiguration
      - template: /eng/build.yml@self
        parameters:
          agentOs: Windows_NT
          pool:
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              name: $(DncEngPublicBuildPool)
              image: 1es-windows-2022-open
              os: windows
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              name: $(DncEngInternalBuildPool)
              image: 1es-windows-2022
              os: windows
          ${{ if eq(variables['System.TeamProject'], 'public') }}:
            helixTargetQueue: Windows.Amd64.VS2022.Pre.Open
          ${{ if ne(variables['System.TeamProject'], 'public') }}:
            helixTargetQueue: Windows.Amd64.VS2022.Pre
          variables:
          - name: _BuildConfig
            value: Release
          - name: _PublishArgs
            value: '-publish /p:DotNetPublishUsingPipelines=true'
          - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
            - name: _SignType
              value: test
            - name: _Test
              value: -test
          - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
            - name: _SignType
              value: real
            - name: _Test
              value: ''
      - template: /eng/common/templates-official/job/source-build.yml@self
        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.yml@self
          parameters:
            agentOs: Windows_NT_FullFramework
            pool:
              ${{ if eq(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngPublicBuildPool)
                image: 1es-windows-2022-open
                os: windows
              ${{ if ne(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngInternalBuildPool)
                image: 1es-windows-2022
                os: windows
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: Windows.Amd64.VS2022.Pre.Open
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: Windows.Amd64.VS2022.Pre
            variables:
            - name: _BuildConfig
              value: Debug
            - name: _PublishArgs
              value: ''
            - name: _SignType
              value: test
            - name: _Test
              value: -test

        - template: /eng/build.yml@self
          parameters:
            agentOs: Windows_NT_TestAsTools
            pool:
              ${{ if eq(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngPublicBuildPool)
                image: 1es-windows-2022-open
                os: windows
              ${{ if ne(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngInternalBuildPool)
                image: 1es-windows-2022
                os: windows
            variables:
            - name: _BuildConfig
              value: Debug
            - name: _PublishArgs
              value: ''
            - name: _SignType
              value: test

        - template: /eng/build.yml@self
          parameters:
            agentOs: Ubuntu_22_04
            pool:
              ${{ if eq(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngPublicBuildPool)
                image: 1es-ubuntu-2204-open
                os: linux
              ${{ if ne(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngInternalBuildPool)
                image: 1es-ubuntu-2204
                os: linux
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: ubuntu.2204.amd64.open
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: Ubuntu.2204.Amd64
            variables:
            - name: _BuildConfig
              value: Release
            - name: _PublishArgs
              value: ''
            - name: _SignType
              value: test
            - name: _Test
              value: -test

        - template: /eng/build.yml@self
          parameters:
            agentOs: Darwin
            pool:
              name: Azure Pipelines
              image: macOS-latest
              os: macOS
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: OSX.13.Amd64.Open
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: OSX.13.Amd64
            variables:
            - name: _BuildConfig
              value: Release
            - name: _PublishArgs
              value: ''
            - name: _SignType
              value: test
            - name: _Test
              value: -test

          # template-engine builds
        - template: /eng/build.yml@self
          parameters:
            agentOs: Windows_NT_TemplateEngine
            pool:
              ${{ if eq(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngPublicBuildPool)
                image: 1es-windows-2022-open
                os: windows
              ${{ if ne(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngInternalBuildPool)
                image: 1es-windows-2022
                os: windows
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: Windows.Amd64.VS2022.Pre.Open
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: Windows.Amd64.VS2022.Pre
            variables:
              - name: _BuildConfig
                value: Release
              - name: PublishArgs
                value: '-publish /p:DotNetPublishUsingPipelines=true'
              - name: _SignType
                value: test
              - name: _Test
                value: -test

        - template: /eng/build.yml@self
          parameters:
            agentOs: Ubuntu_22_04_TemplateEngine
            pool:
              ${{ if eq(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngPublicBuildPool)
                image: 1es-ubuntu-2204-open
                os: linux
              ${{ if ne(variables['System.TeamProject'], 'public') }}:
                name: $(DncEngInternalBuildPool)
                image: 1es-ubuntu-2204
                os: linux
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: 'ubuntu.2204.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-amd64'
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: Ubuntu.2204.Amd64
            variables:
              - name: _BuildConfig
                value: Release
              - name: _PublishArgs
                value: ''
              - name: _SignType
                value: test
              - name: _Test
                value: -test

        - template: /eng/build.yml@self
          parameters:
            agentOs: Darwin_TemplateEngine
            pool:
              name: Azure Pipelines
              image: macOS-latest
              os: macOS
            ${{ if eq(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: OSX.1100.Amd64.Open
            ${{ if ne(variables['System.TeamProject'], 'public') }}:
              helixTargetQueue: OSX.1100.Amd64
            variables:
            - name: _BuildConfig
              value: Release
            - name: _PublishArgs
              value: ''
            - name: _SignType
              value: test
            - name: _Test
              value: -test

        # dotnet-format builds
        - template: /eng/dotnet-format/dotnet-format-integration.yml@self
          parameters:
            PublishTaskName: 1ES.PublishBuildArtifacts@1

      - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
        - template: /eng/common/templates-official/job/publish-build-assets.yml@self
          parameters:
            publishUsingPipelines: true
            publishAssetsImmediately: true
            dependsOn:
              - Windows_NT
              - Source_Build_Managed
            pool:
              name: $(DncEngInternalBuildPool)
              image: 1es-windows-2022
              os: windows
    - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
      - template: /eng/common/templates-official/post-build/post-build.yml@self
        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'
