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

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_16
    displayName: Sanity 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Test {0}
          testFormat: 2.16/sanity/{0}
          targets:
            - test: 1
            - test: 2
            - test: 3
            - test: 4
  - 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
### Units
  - stage: Units_devel
    displayName: Units devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: devel/units/{0}/1
          targets:
            - test: 3.7
            - test: 3.8
            - test: 3.9
            - test: '3.10'
            - test: '3.11'
            - test: '3.12'
  - stage: Units_2_16
    displayName: Units 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.16/units/{0}/1
          targets:
            - test: 2.7
            - test: 3.6
            - 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

## 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.18
              test: alpine/3.18
            # - name: Fedora 39
            #   test: fedora/39
            - 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.3
              test: rhel/9.3
            - name: FreeBSD 13.2
              test: freebsd/13.2
          groups:
            - 1
            - 2
            - 3
  - stage: Remote_2_16
    displayName: Remote 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.16/{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
          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
            # - name: FreeBSD 12.4
            #   test: freebsd/12.4
          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: macOS 12.0
            #  test: macos/12.0
            - name: RHEL 9.0
              test: rhel/9.0
            #- name: FreeBSD 12.4
            #  test: freebsd/12.4
          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 39
              test: fedora39
            - name: Ubuntu 20.04
              test: ubuntu2004
            - name: Ubuntu 22.04
              test: ubuntu2204
            - name: Alpine 3
              test: alpine3
          groups:
            - 1
            - 2
            - 3
  - stage: Docker_2_16
    displayName: Docker 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.16/linux/{0}
          targets:
            - name: Fedora 38
              test: fedora38
            - name: openSUSE 15
              test: opensuse15
          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: 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
          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: '3.7'
            - test: '3.12'
  - stage: Generic_2_16
    displayName: Generic 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.16/generic/{0}/1
          targets:
            - test: '2.7'
            - test: '3.6'
            - 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: Summary
    condition: succeededOrFailed()
    dependsOn:
      - Sanity_devel
      - Sanity_2_16
      - Sanity_2_15
      - Sanity_2_14
      - Units_devel
      - Units_2_16
      - Units_2_15
      - Units_2_14
      - Remote_devel_extra_vms
      - Remote_devel
      - Remote_2_16
      - Remote_2_15
      - Remote_2_14
      - Docker_devel
      - Docker_2_16
      - Docker_2_15
      - Docker_2_14
      - Docker_community_devel
# Right now all generic tests are disabled. Uncomment when at least one of them is re-enabled.
#      - Generic_devel
#      - Generic_2_16
#      - Generic_2_15
#      - Generic_2_14
    jobs:
      - template: templates/coverage.yml
