trigger:
  batch: true
  branches:
    include:
    - master
    - release/*
    - internal/release/3.*

variables:
- name: _PublishBlobFeedUrl
  value: https://dotnetcli.blob.core.windows.net/dotnet/index.json
- name: _PublishChecksumsBlobFeedUrl
  value: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json
- name: _ArcadePublishBlobFeedUrl
  value: https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
- name: _DotNetArtifactsCategory
  value: .NETCore
- name: _DotNetValidationArtifactsCategory
  value: .NETCoreValidation
- name: _PublishUsingPipelines
  value: false
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
  - group: DotNet-DotNetCli-Storage
  - group: DotNet-Blob-Feed
  - name: _PublishUsingPipelines
    value: true

stages:
- stage: build
  jobs:
  - template: /eng/build.yml
    parameters:
      agentOs: Windows_NT
      pool:
        ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
          vmImage: vs2017-win2016
        ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
          name: NetCoreInternal-Pool
          queue: buildpool.windows.10.amd64.vs2017
      timeoutInMinutes: 180
      strategy:
        matrix:
          # Public-only builds
          ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
            Build_Debug_x86:
              _BuildConfig: Debug
              _BuildArchitecture: x86
              _DOTNET_CLI_UI_LANGUAGE: ''
              _DropSuffix: ''
            Build_ES_Debug_x64:
              _BuildConfig: Debug
              _BuildArchitecture: x64
              _DOTNET_CLI_UI_LANGUAGE: es
              _DropSuffix: ''
            Build_DropSuffix_Release_x64:
              _BuildConfig: Release
              _BuildArchitecture: x64
              _DOTNET_CLI_UI_LANGUAGE: ''
              _DropSuffix: true
          # Internal-only builds
          ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
            Build_Release_x86:
              _BuildConfig: Release
              _BuildArchitecture: x86
              _DOTNET_CLI_UI_LANGUAGE: ''
              _DropSuffix: ''
          # Always run builds
          Build_Release_x64:
            _BuildConfig: Release
            _BuildArchitecture: x64
            _DOTNET_CLI_UI_LANGUAGE: ''
            _DropSuffix: ''
            _AdditionalBuildParameters: '/p:PublishInternalAsset=true
              /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1)
              /p:DotNetPublishBlobFeedUrl=$(_ArcadePublishBlobFeedUrl)'
          Build_Release_arm:
            _BuildConfig: Release
            _BuildArchitecture: arm
            _DOTNET_CLI_UI_LANGUAGE: ''
            _DropSuffix: ''

  - template: /eng/build.yml
    parameters:
      agentOs: Linux
      pool:
        name: Hosted Ubuntu 1604
      timeoutInMinutes: 180
      strategy:
        matrix:
          ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
            Build_Ubuntu_16_04_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker ubuntu.16.04'
              _LinuxPortable: ''
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Ubuntu_18_04_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker ubuntu.18.04'
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Fedora_29_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker fedora.29'
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_CentOS_7_1_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker centos'
              _LinuxPortable: ''
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Debian_Stretch_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker debian'
              _LinuxPortable: ''
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Rhel_7_2_Release_x64:
              _BuildConfig: Release
              _DockerParameter: '--docker rhel'
              _LinuxPortable: ''
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Rhel_6_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker rhel.6'
              _LinuxPortable: ''
              _RuntimeIdentifier: '--runtime-id rhel.6-x64'
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Arm_Debug:
              _BuildConfig: Debug
              _DockerParameter: ''
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: '--runtime-id linux-arm'
              _BuildArchitecture: 'arm'
              _DropSuffix: ''
            Build_Arm64_Debug:
              _BuildConfig: Debug
              _DockerParameter: ''
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: '--runtime-id linux-arm64'
              _BuildArchitecture: 'arm64'
              _DropSuffix: ''
            Build_Linux_musl_Debug_x64:
              _BuildConfig: Debug
              _DockerParameter: '--docker alpine.3.6'
              _LinuxPortable: ''
              _RuntimeIdentifier: '--runtime-id linux-musl-x64'
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_LinuxPortable_NoSuffix_Release_x64:
              _BuildConfig: Release
              _DockerParameter: ''
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: true
            Build_Arm_NoSuffix_Release:
              _BuildConfig: Release
              _DockerParameter: ''
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: '--runtime-id linux-arm'
              _BuildArchitecture: 'arm'
              _DropSuffix: true
          ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
            Build_Arm_Release:
              _BuildConfig: Release
              _DockerParameter: ''
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: '--runtime-id linux-arm'
              _BuildArchitecture: 'arm'
              _DropSuffix: ''
            Build_Arm64_Release:
              _BuildConfig: Release
              _DockerParameter: ''
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: '--runtime-id linux-arm64'
              _BuildArchitecture: 'arm64'
              _DropSuffix: ''
            Build_Rhel_6_Release_x64:
              _BuildConfig: Release
              _DockerParameter: '--docker rhel.6'
              _LinuxPortable: ''
              _RuntimeIdentifier: '--runtime-id rhel.6-x64'
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Linux_musl_Release_x64:
              _BuildConfig: Release
              _DockerParameter: '--docker alpine.3.6'
              _LinuxPortable: ''
              _RuntimeIdentifier: '--runtime-id linux-musl-x64'
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
            Build_Linux_Portable_Deb_Release_x64:
              _BuildConfig: Release
              _DockerParameter: '--docker ubuntu.16.04'
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
              # Do not publish zips and tarballs. The linux-x64 binaries are
              # already published by Build_LinuxPortable_Release_x64
              _AdditionalBuildParameters: '/p:PublishBinariesAndBadge=false'
            Build_Linux_Portable_Rpm_Release_x64:
              _BuildConfig: Release
              _DockerParameter: '--docker rhel'
              _LinuxPortable: '--linux-portable'
              _RuntimeIdentifier: ''
              _BuildArchitecture: 'x64'
              _DropSuffix: ''
              # Do not publish zips and tarballs. The linux-x64 binaries are
              # already published by Build_LinuxPortable_Release_x64
              _AdditionalBuildParameters: '/p:PublishBinariesAndBadge=false'
          Build_LinuxPortable_Release_x64:
            _BuildConfig: Release
            _DockerParameter: ''
            _LinuxPortable: '--linux-portable'
            _RuntimeIdentifier: ''
            _BuildArchitecture: 'x64'
            _DropSuffix: ''

  - template: /eng/build.yml
    parameters:
      agentOs: Darwin
      pool: 
        name: Hosted macOS
      timeoutInMinutes: 180
      strategy:
        matrix:
          Build_Release:
            _BuildConfig: Release

  # https://github.com/dotnet/core-sdk/issues/248
  # - template: /eng/build.yml
  #   parameters:
  #     agentOs: FreeBSD
  #     queue: 
  #       name: dnceng-freebsd-internal
  #       timeoutInMinutes: 180
  #       matrix:
  #         Build_Release:
  #           _BuildConfig: Release
  #           _AdditionalBuildParameters: '/p:DisableSourceLink=true /p:DISABLE_CROSSGEN=true'

  - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
    - template: /eng/common/templates/job/publish-build-assets.yml
      parameters:
        dependsOn:
          - Windows_NT
          - Linux
          - Darwin
        publishUsingPipelines: true
        pool:
          vmImage: vs2017-win2016

- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
  - template: eng\common\templates\post-build\post-build.yml
    parameters:
      # Symbol validation isn't being very reliable lately. This should be enabled back
      # once this issue is resolved: https://github.com/dotnet/arcade/issues/2871
      enableSymbolValidation: false
      # This repo doesn't produce any signed packages.
      enableSigningValidation: false
      publishInstallersAndChecksums: true

- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), not(contains(variables['Build.SourceBranch'], 'refs/heads/internal/'))) }}:
  - stage: copy_to_latest
    displayName: Copy to latest
    dependsOn:
      # This will run only after all the publishing stages have run.
      # These stages are introduced in the eng/common/templates/post-build/channels YAML templates
      - NetCore_Dev5_Publish
    jobs:
    - job: Copy_SDK_To_Latest
      pool:
        name: Hosted VS2017
      condition: succeeded()
      variables:
        - group: DotNet-DotNetCli-Storage
      steps:
        - script: eng/CopyToLatest.cmd
                  /p:DotnetPublishSdkAssetsBlobFeedUrl=https://dotnetcli.blob.core.windows.net/dotnet/index.json
                  /p:DotNetPublishSdkAssetsBlobFeedKey=$(dotnetcli-storage-key)
                  /p:DotnetPublishChecksumsBlobFeedUrl=https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json
                  /p:DotNetPublishChecksumsBlobFeedKey=$(dotnetclichecksums-storage-key)
          displayName: Copy to latest