---
# 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-6
        - stable-5
  - cron: 0 11 * * 0
    displayName: Weekly (old stable branches)
    always: true
    branches:
      include:
        - stable-4

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:3.0.0

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_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
  - stage: Sanity_2_12
    displayName: Sanity 2.12
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: 2.12/sanity/{0}
          targets:
            - test: 1
            - test: 2
            - test: 3
            - test: 4
  - stage: Sanity_2_11
    displayName: Sanity 2.11
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: 2.11/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.5
            - test: 3.6
            - test: 3.7
            - test: 3.8
            - test: 3.9
            - test: '3.10'
            - test: '3.11'
  - 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: 2.7
            - 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
  - stage: Units_2_12
    displayName: Units 2.12
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.12/units/{0}/1
          targets:
            - test: 2.6
            - test: 3.8
  - stage: Units_2_11
    displayName: Units 2.11
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.11/units/{0}/1
          targets:
            - test: 2.7
            - test: 3.5

## Remote
  - stage: Remote_devel
    displayName: Remote devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/{0}
          targets:
            - name: macOS 12.0
              test: macos/12.0
            - name: RHEL 7.9
              test: rhel/7.9
            - name: RHEL 9.0
              test: rhel/9.0
            - name: FreeBSD 12.3
              test: freebsd/12.3
            - 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 13.1
              test: freebsd/13.1
          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
          groups:
            - 1
            - 2
            - 3
  - stage: Remote_2_12
    displayName: Remote 2.12
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.12/{0}
          targets:
            - name: macOS 11.1
              test: macos/11.1
            - name: RHEL 8.4
              test: rhel/8.4
            - name: FreeBSD 13.0
              test: freebsd/13.0
          groups:
            - 1
            - 2
            - 3
  - stage: Remote_2_11
    displayName: Remote 2.11
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.11/{0}
          targets:
            - name: RHEL 7.9
              test: rhel/7.9
            - name: RHEL 8.3
              test: rhel/8.3
          groups:
            - 1
            - 2
            - 3

### Docker
  - stage: Docker_devel
    displayName: Docker devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/linux/{0}
          targets:
            - name: CentOS 7
              test: centos7
            - name: Fedora 36
              test: fedora36
            - 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_14
    displayName: Docker 2.14
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.14/linux/{0}
          targets:
            - name: Ubuntu 20.04
              test: ubuntu2004
          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
  - stage: Docker_2_12
    displayName: Docker 2.12
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.12/linux/{0}
          targets:
            - name: CentOS 6
              test: centos6
            - name: Fedora 34
              test: fedora34
            - name: Ubuntu 18.04
              test: ubuntu1804
          groups:
            - 1
            - 2
            - 3
  - stage: Docker_2_11
    displayName: Docker 2.11
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.11/linux/{0}
          targets:
            - name: Fedora 32
              test: fedora32
            - name: Fedora 33
              test: fedora33
            - 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: ArchLinux
              test: archlinux/3.10
            - name: CentOS Stream 8
              test: centos-stream8/3.8
          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_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: Generic_2_12
    displayName: Generic 2.12
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.12/generic/{0}/1
          targets:
            - test: 3.8
  - stage: Generic_2_11
    displayName: Generic 2.11
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.11/generic/{0}/1
          targets:
            - test: 2.7
            - test: 3.5

  - stage: Summary
    condition: succeededOrFailed()
    dependsOn:
      - Sanity_devel
      - Sanity_2_11
      - Sanity_2_12
      - Sanity_2_13
      - Sanity_2_14
      - Units_devel
      - Units_2_11
      - Units_2_12
      - Units_2_13
      - Units_2_14
      - Remote_devel
      - Remote_2_11
      - Remote_2_12
      - Remote_2_13
      - Remote_2_14
      - Docker_devel
      - Docker_2_11
      - Docker_2_12
      - Docker_2_13
      - Docker_2_14
      - Docker_community_devel
      - Generic_devel
      - Generic_2_11
      - Generic_2_12
      - Generic_2_13
      - Generic_2_14
    jobs:
      - template: templates/coverage.yml
