---
# 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 9 * * *
    displayName: Nightly
    always: true
    branches:
      include:
        - main
  - cron: 0 12 * * 0
    displayName: Weekly (old stable branches)
    always: true
    branches:
      include:
        - stable-*

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

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

pool: Standard

stages:
### Sanity & units
  - stage: Ansible_devel
    displayName: Sanity & Units devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          targets:
            - name: Sanity
              test: 'devel/sanity/1'
            - name: Sanity Extra # Only on devel
              test: 'devel/sanity/extra'
            - name: Units
              test: 'devel/units/1'
  - stage: Ansible_2_18
    displayName: Sanity & Units 2.18
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          targets:
            - name: Sanity
              test: '2.18/sanity/1'
            - name: Units
              test: '2.18/units/1'
  - stage: Ansible_2_17
    displayName: Sanity & Units 2.17
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          targets:
            - name: Sanity
              test: '2.17/sanity/1'
            - name: Units
              test: '2.17/units/1'
  - stage: Ansible_2_16
    displayName: Sanity & Units 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          targets:
            - name: Sanity
              test: '2.16/sanity/1'
            - name: Units
              test: '2.16/units/1'
### Docker
  - stage: Docker_devel
    displayName: Docker devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/linux/{0}
          targets:
            - name: Fedora 41
              test: fedora41
            - name: Ubuntu 24.04
              test: ubuntu2404
            - name: Alpine 3.21
              test: alpine321
          groups:
            - 1
            - 2
  - stage: Docker_2_18
    displayName: Docker 2.18
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.18/linux/{0}
          targets:
            - name: Fedora 40
              test: fedora40
            - name: Ubuntu 24.04
              test: ubuntu2404
            - name: Alpine 3.20
              test: alpine320
          groups:
            - 1
            - 2
  - stage: Docker_2_17
    displayName: Docker 2.17
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.17/linux/{0}
          targets:
            - name: Fedora 39
              test: fedora39
            - name: Ubuntu 22.04
              test: ubuntu2204
            - name: Alpine 3.19
              test: alpine319
          groups:
            - 1
            - 2
  - 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
            - name: Alpine 3
              test: alpine3
          groups:
            - 1
            - 2

### 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.13
          groups:
            - 1
            - 2

### 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.21
              test: alpine/3.21
            - name: Fedora 41
              test: fedora/41
            - name: Ubuntu 22.04
              test: ubuntu/22.04
            - name: Ubuntu 24.04
              test: ubuntu/24.04
          groups:
            - vm
  - stage: Remote_devel
    displayName: Remote devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: devel/{0}
          targets:
            - name: macOS 15.3
              test: macos/15.3
            - name: RHEL 9.5
              test: rhel/9.5
            - name: FreeBSD 14.2
              test: freebsd/14.2
            - name: FreeBSD 13.4
              test: freebsd/13.4
          groups:
            - 1
            - 2
  - stage: Remote_2_18
    displayName: Remote 2.18
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.18/{0}
          targets:
            - name: macOS 14.3
              test: macos/14.3
            - name: RHEL 9.4
              test: rhel/9.4
            - name: FreeBSD 14.1
              test: freebsd/14.1
          groups:
            - 1
            - 2
  - stage: Remote_2_17
    displayName: Remote 2.17
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          testFormat: 2.17/{0}
          targets:
            - name: RHEL 9.3
              test: rhel/9.3
            - name: FreeBSD 13.3
              test: freebsd/13.3
            - name: FreeBSD 14.0
              test: freebsd/14.0
          groups:
            - 1
            - 2
  - 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: RHEL 7.9
              test: rhel/7.9
            # - name: FreeBSD 13.2
            #   test: freebsd/13.2
          groups:
            - 1
            - 2
### Generic
  - stage: Generic_devel
    displayName: Generic devel
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: devel/generic/{0}
          targets:
            - test: "3.8"
            # - test: "3.9"
            # - test: "3.10"
            - test: "3.11"
            - test: "3.13"
          groups:
            - 1
            - 2
  - stage: Generic_2_18
    displayName: Generic 2.18
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.18/generic/{0}
          targets:
            - test: "3.8"
            - test: "3.13"
          groups:
            - 1
            - 2
  - stage: Generic_2_17
    displayName: Generic 2.17
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.17/generic/{0}
          targets:
            - test: "3.7"
            - test: "3.12"
          groups:
            - 1
            - 2
  - stage: Generic_2_16
    displayName: Generic 2.16
    dependsOn: []
    jobs:
      - template: templates/matrix.yml
        parameters:
          nameFormat: Python {0}
          testFormat: 2.16/generic/{0}
          targets:
            - test: "2.7"
            - test: "3.6"
            - test: "3.11"
          groups:
            - 1
            - 2

  ## Finally

  - stage: Summary
    condition: succeededOrFailed()
    dependsOn:
      - Ansible_devel
      - Ansible_2_18
      - Ansible_2_17
      - Ansible_2_16
      - Remote_devel_extra_vms
      - Remote_devel
      - Remote_2_18
      - Remote_2_17
      - Remote_2_16
      - Docker_devel
      - Docker_2_18
      - Docker_2_17
      - Docker_2_16
      - Docker_community_devel
      - Generic_devel
      - Generic_2_18
      - Generic_2_17
      - Generic_2_16
    jobs:
      - template: templates/coverage.yml
