---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

trigger:
  batch: true
  branches:
    include:
      - main
      - stable-*

pr:
  autoCancel: true
  branches:
    include:
      - main
      - stable-*

schedules:
  - cron: 0 8 * * *
    displayName: Nightly (main)
    always: true
    branches:
      include:
        - main
  - cron: 0 10 * * *
    displayName: Nightly (active stable branches)
    always: true
    branches:
      include:
        - stable-7
        - stable-6
  - cron: 0 11 * * 0
    displayName: Weekly (old stable branches)
    always: true
    branches:
      include:
        - stable-5

variables:
  - name: checkoutPath
    value: ansible_collections/community/general
  - name: coverageBranches
    value: main
  - name: pipelinesCoverage
    value: coverage
  - name: entryPoint
    value: tests/utils/shippable/shippable.sh
  - name: fetchDepth
    value: 0

resources:
  containers:
    - container: default
      image: quay.io/ansible/azure-pipelines-test-container:4.0.1

pool: Standard

stages:
### Sanity
  - stage: Sanity_devel
    displayName: Sanity devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: devel/sanity/{0}
          targets:
            - test: 1
            - test: 2
            - test: 3
            - test: 4
            - test: extra
  - stage: Sanity_2_15
    displayName: Sanity 2.15
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: 2.15/sanity/{0}
          targets:
            - test: 1
            - test: 2
            - test: 3
            - test: 4
  - stage: Sanity_2_14
    displayName: Sanity 2.14
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: 2.14/sanity/{0}
          targets:
            - test: 1
            - test: 2
            - test: 3
            - test: 4
  - stage: Sanity_2_13
    displayName: Sanity 2.13
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: 2.13/sanity/{0}
          targets:
            - test: 1
            - test: 2
            - test: 3
            - test: 4
### Units
  - stage: Units_devel
    displayName: Units devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: devel/units/{0}/1
          targets:
            - test: 2.7
            - test: 3.6
            - test: 3.7
            - test: 3.8
            - test: 3.9
            - test: '3.10'
            - test: '3.11'
  - stage: Units_2_15
    displayName: Units 2.15
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.15/units/{0}/1
          targets:
            - test: 3.5
            - test: "3.10"
  - stage: Units_2_14
    displayName: Units 2.14
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.14/units/{0}/1
          targets:
            - test: 3.9
  - stage: Units_2_13
    displayName: Units 2.13
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.13/units/{0}/1
          targets:
            - test: 2.7
            - test: 3.8

## Remote
  - stage: Remote_devel_extra_vms
    displayName: Remote devel extra VMs
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/{0}
          targets:
            - name: Alpine 3.17
              test: alpine/3.17
            # - name: Fedora 38
            #   test: fedora/38
            - name: Ubuntu 22.04
              test: ubuntu/22.04
          groups:
            - vm
  - stage: Remote_devel
    displayName: Remote devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/{0}
          targets:
            - name: macOS 13.2
              test: macos/13.2
            - name: RHEL 9.2
              test: rhel/9.2
            - name: RHEL 8.8
              test: rhel/8.8
            - name: FreeBSD 13.2
              test: freebsd/13.2
            - name: FreeBSD 12.4
              test: freebsd/12.4
          groups:
            - 1
            - 2
            - 3
  - stage: Remote_2_15
    displayName: Remote 2.15
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.15/{0}
          targets:
            - name: RHEL 9.1
              test: rhel/9.1
            - name: RHEL 8.7
              test: rhel/8.7
            - name: RHEL 7.9
              test: rhel/7.9
            - name: FreeBSD 13.1
              test: freebsd/13.1
          groups:
            - 1
            - 2
            - 3
  - stage: Remote_2_14
    displayName: Remote 2.14
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.14/{0}
          targets:
            - name: RHEL 9.0
              test: rhel/9.0
            - name: FreeBSD 12.3
              test: freebsd/12.3
          groups:
            - 1
            - 2
            - 3
  - stage: Remote_2_13
    displayName: Remote 2.13
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.13/{0}
          targets:
            - name: macOS 12.0
              test: macos/12.0
            - name: RHEL 8.5
              test: rhel/8.5
            - name: FreeBSD 13.0
              test: freebsd/13.0
          groups:
            - 1
            - 2
            - 3

### Docker
  - stage: Docker_devel
    displayName: Docker devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/linux/{0}
          targets:
            - name: Fedora 38
              test: fedora38
            - name: openSUSE 15
              test: opensuse15
            - name: Ubuntu 20.04
              test: ubuntu2004
            - name: Ubuntu 22.04
              test: ubuntu2204
            - name: Alpine 3
              test: alpine3
          groups:
            - 1
            - 2
            - 3
  - stage: Docker_2_15
    displayName: Docker 2.15
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.15/linux/{0}
          targets:
            - name: Fedora 37
              test: fedora37
            - name: CentOS 7
              test: centos7
          groups:
            - 1
            - 2
            - 3
  - stage: Docker_2_14
    displayName: Docker 2.14
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.14/linux/{0}
          targets:
            - name: Fedora 36
              test: fedora36
          groups:
            - 1
            - 2
            - 3
  - stage: Docker_2_13
    displayName: Docker 2.13
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.13/linux/{0}
          targets:
            - name: Fedora 35
              test: fedora35
            - name: openSUSE 15 py2
              test: opensuse15py2
            - name: Alpine 3
              test: alpine3
          groups:
            - 1
            - 2
            - 3

### Community Docker
  - stage: Docker_community_devel
    displayName: Docker (community images) devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/linux-community/{0}
          targets:
            - name: Debian Bullseye
              test: debian-bullseye/3.9
            - name: Debian Bookworm
              test: debian-bookworm/3.11
            - name: ArchLinux
              test: archlinux/3.11
            - name: CentOS Stream 8
              test: centos-stream8/3.9
          groups:
            - 1
            - 2
            - 3

### Generic
  - stage: Generic_devel
    displayName: Generic devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: devel/generic/{0}/1
          targets:
            - test: 2.7
            - test: '3.11'
  - stage: Generic_2_15
    displayName: Generic 2.15
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.15/generic/{0}/1
          targets:
            - test: 3.9
  - stage: Generic_2_14
    displayName: Generic 2.14
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.14/generic/{0}/1
          targets:
            - test: '3.10'
  - stage: Generic_2_13
    displayName: Generic 2.13
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.13/generic/{0}/1
          targets:
            - test: 3.9

  - stage: Summary
    condition: succeededOrFailed()
    dependsOn:
      - Sanity_devel
      - Sanity_2_13
      - Sanity_2_14
      - Sanity_2_15
      - Units_devel
      - Units_2_13
      - Units_2_14
      - Units_2_15
      - Remote_devel_extra_vms
      - Remote_devel
      - Remote_2_13
      - Remote_2_14
      - Remote_2_15
      - Docker_devel
      - Docker_2_13
      - Docker_2_14
      - Docker_2_15
      - Docker_community_devel
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
#      - Generic_devel
#      - Generic_2_13
#      - Generic_2_14
#      - Generic_2_15
    jobs:
      - template: templates/coverage.yml