parameters:
  coverage: false
  sudo_dependencies: sudo
  dependencies: apt
  patchcheck: true
  xvfb: true

steps:
- checkout: self
  clean: true
  fetchDepth: 5

# Work around a known issue affecting Ubuntu VMs on Pipelines
- script: sudo setfacl -Rb /home/vsts
  displayName: 'Workaround ACL issue'

- script: ${{ parameters.sudo_dependencies }} ./.azure-pipelines/posix-deps-${{ parameters.dependencies }}.sh $(openssl_version)
  displayName: 'Install dependencies'

- script: ./configure --with-pydebug
  displayName: 'Configure CPython (debug)'

- script: make -j4
  displayName: 'Build CPython'

- ${{ if eq(parameters.coverage, 'true') }}:
  - script: ./python -m venv venv && ./venv/bin/python -m pip install -U coverage
    displayName: 'Set up virtual environment'

  - script: ./venv/bin/python -m test.pythoninfo
    displayName: 'Display build info'

  - script: |
      $COMMAND -m coverage run --pylib -m test \
                --fail-env-changed \
                -uall,-cpu \
                --junit-xml=$(build.binariesDirectory)/test-results.xml \
                -x test_multiprocessing_fork \
                -x test_multiprocessing_forkserver \
                -x test_multiprocessing_spawn \
                -x test_concurrent_futures
    displayName: 'Tests with coverage'
    env:
      ${{ if eq(parameters.xvfb, 'true') }}:
        COMMAND: xvfb-run ./venv/bin/python
      ${{ if ne(parameters.xvfb, 'true') }}:
        COMMAND: ./venv/bin/python

  - script: ./venv/bin/python -m coverage xml
    displayName: 'Generate coverage.xml'

  - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
    displayName: 'Publish code coverage results'


- ${{ if ne(parameters.coverage, 'true') }}:
  - script: make pythoninfo
    displayName: 'Display build info'

  - script: $COMMAND buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml"
    displayName: 'Tests'
    env:
      ${{ if eq(parameters.xvfb, 'true') }}:
        COMMAND: xvfb-run make
      ${{ if ne(parameters.xvfb, 'true') }}:
        COMMAND: make

- ${{ if eq(parameters.patchcheck, 'true') }}:
  - script: ./python Tools/scripts/patchcheck.py --travis true
    displayName: 'Run patchcheck.py'
    condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))


- task: PublishTestResults@2
  displayName: 'Publish Test Results'
  inputs:
    testResultsFiles: '$(build.binariesDirectory)/test-results.xml'
    mergeTestResults: true
    testRunTitle: $(testRunTitle)
    platform: $(testRunPlatform)
  condition: succeededOrFailed()
