# README FIRST
# 1. Subscribe to https://github.com/ansible-collections/news-for-maintainers
#    (click the Watch button on the homepage > Custom > Issues)
#    and keep this matrix up to date in accordance to related announcements.
#    Timely add new ansible-core versions and consider dropping support
#    and testing against its EOL versions.
# 2. If your collection repository is under the ansible-collections org,
#    please keep in mind that the number of GHA jobs is limited
#    and shared across all the collections in the org.
#    So, focusing on good test coverage of your collection,
#    please avoid testing against unnecessary entities such as
#    ansible-core EOL versions your collection does not support
#    or ansible-core versions that are not EOL yet but not supported by the collection.
# 3. If you don't have unit or integration tests, remove corresponding sections.
# 4. If your collection depends on other collections ensure they are installed,
#    add them to the "test-deps" input.
# 5. For the comprehensive list of the inputs supported by the
#    ansible-community/ansible-test-gh-action GitHub Action, see
#    https://github.com/marketplace/actions/ansible-test.
# 6. If you want to prevent merging PRs that do not pass all tests,
#    make sure to add the "check" job to your repository branch
#    protection once this workflow is added.
#    It is also possible to tweak which jobs are allowed to fail. See
#    https://github.com/marketplace/actions/alls-green#gotchas for more detail.
# 7. If you need help please ask in #community:ansible.com on Matrix
#    or in bridged #ansible-community on the Libera.Chat IRC channel.
#    See https://docs.ansible.com/ansible/devel/community/communication.html
#    for details.
# 8. If your collection is [going to get] included in the Ansible package,
#    it has to adhere to Python compatibility and CI testing requirements described in
#    https://docs.ansible.com/ansible/latest/community/collection_contributors/collection_requirements.html.

---
name: Sanity tests
on:
  # Run CI against all pushes (direct commits, also merged PRs), Pull Requests
  push:
    branches:
      - main
      - stable-*
  pull_request:
  # Run CI once per day (at 04:23 UTC)
  # This ensures that even if there haven't been commits that we are still
  # testing against latest version of ansible-test for each ansible-core
  # version
  schedule:
    - cron: "23 4 * * *"

concurrency:
  group: >-
    ${{ github.workflow }}-${{
      github.event.pull_request.number || github.sha
    }}
  cancel-in-progress: true

jobs:
  ###
  # Sanity tests (REQUIRED)
  #
  # https://docs.ansible.com/ansible/latest/dev_guide/testing_sanity.html

  sanity:
    name: Sanity (Ⓐ${{ matrix.ansible }})
    strategy:
      matrix:
        ansible:
          # It's important that Sanity is tested against all stable-X.Y branches
          # Testing against `devel` may fail as new tests are added.
          # An alternative to `devel` is the `milestone` branch with
          # gets synchronized with `devel` every few weeks and therefore
          # tends to be a more stable target. Be aware that it is not updated
          # around creation of a new stable branch, this might cause a problem
          # that two different versions of ansible-test use the same sanity test
          # ignore.txt file.
          # Add new versions announced in
          # https://github.com/ansible-collections/news-for-maintainers in a timely manner,
          # consider dropping testing against EOL versions and versions you don't support.
          - stable-2.15
          - stable-2.16
          - stable-2.17
          - stable-2.18
          # - devel
          # - milestone
    # Ansible-test on various stable branches does not yet work well with cgroups v2.
    # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04
    # image for these stable branches. The list of branches where this is necessary will
    # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28
    # for the latest list.
    runs-on: >-
      ${{ contains(fromJson(
          '["stable-2.9", "stable-2.10", "stable-2.11"]'
      ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }}
    steps:
      # Run sanity tests inside a Docker container.
      # The docker container has all the pinned dependencies that are
      # required and all Python versions Ansible supports.
      - name: Perform sanity testing
        # See the documentation for the following GitHub action on
        # https://github.com/ansible-community/ansible-test-gh-action/blob/main/README.md
        uses: ansible-community/ansible-test-gh-action@release/v1
        with:
          ansible-core-version: ${{ matrix.ansible }}
          testing-type: sanity
          # OPTIONAL If your sanity tests require code
          # from other collections, install them like this
          # test-deps: >-
          #   ansible.netcommon
          #   ansible.utils
          test-deps: >-
            cloud.common
          # OPTIONAL If set to true, will test only against changed files,
          # which should improve CI performance. See limitations on
          # https://github.com/ansible-community/ansible-test-gh-action#pull-request-change-detection
          pull-request-change-detection: false

  check: # This job does nothing and is only used for the branch protection
    # or multi-stage CI jobs, like making sure that all tests pass before
    # a publishing job is started.
    if: always()

    needs:
      - sanity

    runs-on: ubuntu-latest

    steps:
      - name: Decide whether the needed jobs succeeded or failed
        uses: re-actors/alls-green@release/v1
        with:
          jobs: ${{ toJSON(needs) }}