name: tox
on: [push, pull_request]
permissions:
  contents: read # to fetch code (actions/checkout)
env:
  # note that some tools care only for the name, not the value
  FORCE_COLOR: 1
jobs:
  tox:
    name: ${{ matrix.os }} / ${{ matrix.python-version }}
    # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes
    timeout-minutes: 20
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        unsupported: [false]
        os:
         - ubuntu-latest
         # Not testing Windows: tests need Unix-only fcntl, grp, pwd, etc.
         # FreeBSD: tested in separate freebsd.yml workflow
        python-version:
         # Supporting Python 3.10 through 3.13
         - "3.10"
         - "3.11"
         - "3.12"
         - "3.13"
         - "pypy-3.10"
        include:
         # Test on macos-latest (arm64) with recent versions
         - os: macos-latest
           python-version: "3.12"
           unsupported: false
         - os: macos-latest
           python-version: "3.13"
           unsupported: false
    steps:
      - uses: actions/checkout@v6
      - name: Using Python ${{ matrix.python-version }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}
          cache: pip
          cache-dependency-path: requirements_test.txt
          check-latest: true
          allow-prereleases: ${{ matrix.unsupported }}
      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install tox
      - run: tox -e run-module
        continue-on-error: ${{ matrix.unsupported }}
      - run: tox -e run-entrypoint
        continue-on-error: ${{ matrix.unsupported }}
      - run: tox -e py
        continue-on-error: ${{ matrix.unsupported }}
