name: Collection build and tests

on:
  push:
  pull_request:
  schedule:
    - cron: 3 0 * * *  # Run daily at 0:03 UTC

jobs:
  build-collection-artifact:
    name: Build
    runs-on: ${{ matrix.runner-os }}
    strategy:
      matrix:
        runner-os:
          - ubuntu-24.04
        ansible-version:
          - git+https://github.com/ansible/ansible.git@stable-2.15
        runner-python-version:
          - 3.9
    steps:
      - name: Check out ${{ github.repository }} on disk
        uses: actions/checkout@v6
      - name: Set up Python ${{ matrix.runner-python-version }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.runner-python-version }}
      - name: Set up pip cache
        uses: actions/cache@v5
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('tests/sanity/requirements.txt') }}-${{ hashFiles('tests/unit/requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-
            ${{ runner.os }}-
      - name: Install Ansible ${{ matrix.ansible-version }}
        run: >-
          python -m pip install --user '${{ matrix.ansible-version }}'
      - name: Build a collection tarball
        run: >-
          ~/.local/bin/ansible-galaxy collection build --output-path
          "${GITHUB_WORKSPACE}/.cache/collection-tarballs"
      - name: Store migrated collection artifacts
        uses: actions/upload-artifact@v6
        with:
          name: collection
          path: .cache/collection-tarballs

  sanity-test-collection-via-containers:
    name: Sanity in container via Py-${{ matrix.python-version }} & ${{ matrix.ansible-version }}
    needs:
      - build-collection-artifact
    runs-on: ${{ matrix.runner-os }}
    strategy:
      fail-fast: false
      matrix:
        runner-os:
          - ubuntu-24.04
        runner-python-version:
          - '3.11'
        ansible-version:
          - git+https://github.com/ansible/ansible.git@stable-2.18
          - git+https://github.com/ansible/ansible.git@devel
        python-version:
          - '3.11'
        include:
          - runner-os: ubuntu-24.04
            runner-python-version: '3.12'
            ansible-version: git+https://github.com/ansible/ansible.git@devel
            python-version: '3.12'
        exclude:
          - runner-os: ubuntu-24.04
            runner-python-version: '3.11'
            ansible-version: git+https://github.com/ansible/ansible.git@devel
            python-version: '3.11'


    steps:
      - name: Set up Python ${{ matrix.runner-python-version }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.runner-python-version }}
      - name: Set up pip cache
        uses: actions/cache@v5
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ github.ref }}-sanity-containers
          restore-keys: |
            ${{ runner.os }}-pip-
            ${{ runner.os }}-
      - name: Install Ansible ${{ matrix.ansible-version }}
        run: >-
          python -m pip install --user '${{ matrix.ansible-version }}'
      - name: Download migrated collection artifacts
        uses: actions/download-artifact@v7
        with:
          name: collection
          path: .cache/collection-tarballs
      - name: Install the collection tarball
        run: >-
          ~/.local/bin/ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz
      - name: Run collection sanity tests
        run: >-
          ~/.local/bin/ansible-test sanity
          --color
          --requirements
          --python "${{ matrix.python-version }}" -vvv
          plugins/ tests/
        working-directory: >-
          /home/runner/.ansible/collections/ansible_collections/containers/podman

#  When we have unit tests, add them here
