---
# yamllint disable rule:line-length
name: Python Unit Tests
on:  # yamllint disable-line rule:truthy
  pull_request:
  merge_group:
    branches:
      - main
    types:
      - checks_requested
  push:
    branches:
      - main
  workflow_dispatch:
permissions:
  contents: read
jobs:
  python:
    strategy:
      matrix:
        pyver_os:
          - ver: "2.7"
            os: ubuntu-22.04
          - ver: "3.9"
            os: ubuntu-latest
          - ver: "3.10"
            os: ubuntu-latest
          - ver: "3.11"
            os: ubuntu-latest
          - ver: "3.12"
            os: ubuntu-latest
          - ver: "3.13"
            os: ubuntu-latest
    runs-on: ${{ matrix.pyver_os.os }}
    steps:
      - name: Update git
        run: |
          set -euxo pipefail
          sudo apt update
          sudo apt install -y git

      - name: checkout PR
        uses: actions/checkout@v6

      - name: Set up Python 2.7
        if: ${{ matrix.pyver_os.ver == '2.7' }}
        run: |
          set -euxo pipefail
          sudo apt install -y python2.7

      - name: Set up Python 3
        if: ${{ matrix.pyver_os.ver != '2.7' }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.pyver_os.ver }}

      - name: Install platform dependencies, python, tox, tox-lsr
        run: |
          set -euxo pipefail
          python -m pip install --upgrade pip
          if [ "${{ matrix.pyver_os.ver }}" = 2.7 ]; then
            # newer virtualenv cannot create python2 venvs
            # newer tox requires newer virtualenv
            tox='tox<4.15'
            virtualenv='virtualenv<20.22.0'
          else
            tox=tox
            virtualenv=virtualenv
          fi
          pip install "$tox" "$virtualenv" "git+https://github.com/linux-system-roles/tox-lsr@3.14.0"
          # If you have additional OS dependency packages e.g. libcairo2-dev
          # then put them in .github/config/ubuntu-requirements.txt, one
          # package per line.
          if [ -f .github/config/ubuntu-requirements.txt ]; then
            sudo apt-get install -y $(cat .github/config/ubuntu-requirements.txt)
          fi

      - name: Run unit tests
        run: |
          set -euxo pipefail
          toxpyver=$(echo "${{ matrix.pyver_os.ver }}" | tr -d .)
          toxenvs="py${toxpyver}"
          # NOTE: The use of flake8, pylint, black with specific
          # python envs is arbitrary and must be changed in tox-lsr
          case "$toxpyver" in
          311) toxenvs="${toxenvs},coveralls,flake8,pylint,black" ;;
          *) toxenvs="${toxenvs},coveralls" ;;
          esac
          TOXENV="$toxenvs" lsr_ci_runtox

      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v5
