name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
trigger:
  # Batch merge builds together while a merge build is running
  batch: true
  branches:
    include:
    - master
    - release*
    - feature*
  paths:
    include:
    - '*'
    exclude:
    - /.vsts-ci/misc-analysis.yml
    - /.github/ISSUE_TEMPLATE/*
    - /.dependabot/config.yml
    - test/perf/*
pr:
  branches:
    include:
    - master
    - release*
    - feature*
  paths:
    include:
    - '*'
    exclude:
    - .dependabot/config.yml
    - .github/ISSUE_TEMPLATE/*
    - .vsts-ci/misc-analysis.yml
    - .vsts-ci/windows.yml
    - .vsts-ci/windows/*
    - test/common/markdown/*
    - test/perf/*
    - tools/releaseBuild/*
    - tools/releaseBuild/azureDevOps/templates/*

variables:
  DOTNET_CLI_TELEMETRY_OPTOUT: 1
  POWERSHELL_TELEMETRY_OPTOUT: 1
  # Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
  __SuppressAnsiEscapeSequences: 1

resources:
- repo: self
  clean: true

stages:
- stage: BuildLinux
  displayName: Build for Linux
  jobs:
  - template: templates/ci-build.yml
    parameters:
      pool: ubuntu-20.04
      jobName: linux_build
      displayName: linux Build

- stage: TestLinux
  displayName: Test for Linux
  jobs:
  - template: templates/nix-test.yml
    parameters:
      name: Linux
      pool: ubuntu-20.04
      purpose: UnelevatedPesterTests
      tagSet: CI

  - template: templates/nix-test.yml
    parameters:
      name: Linux
      pool: ubuntu-20.04
      purpose: ElevatedPesterTests
      tagSet: CI

  - template: templates/nix-test.yml
    parameters:
      name: Linux
      pool: ubuntu-20.04
      purpose: UnelevatedPesterTests
      tagSet: Others

  - template: templates/nix-test.yml
    parameters:
      name: Linux
      pool: ubuntu-20.04
      purpose: ElevatedPesterTests
      tagSet: Others

  - template: templates/verify-xunit.yml
    parameters:
      pool: ubuntu-20.04

- stage: PackageLinux
  displayName: Package Linux
  dependsOn: ["BuildLinux"]
  jobs:
  - template: linux/templates/packaging.yml
    parameters:
      pool: ubuntu-20.04

- stage: CodeCovTestPackage
  displayName: CodeCoverage and Test Packages
  dependsOn: [] # by specifying an empty array, this stage doesn't depend on the stage before it
  jobs:
  - job: CodeCovTestPackage
    displayName: CodeCoverage and Test Packages
    pool:
      vmImage: ubuntu-20.04
    steps:
    - pwsh: |
        Import-Module .\tools\ci.psm1
        New-CodeCoverageAndTestPackage
      displayName: CodeCoverage and Test Package
