name: tests

on:
  push:
    branches-ignore:
    - 'wip-*'
    paths-ignore:
    - 'docs/**'
  pull_request:
    branches-ignore:
    - 'wip-*'
    paths-ignore:
    - 'docs/**'

env:
  FORCE_COLOR: '1'

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        python:
        - version: "3.9"
        - version: "3.10"
        - version: "3.11"
        - version: "3.12"
        - version: "3.13"
        - version: "pypy3.9"
        - version: "pypy3.10"

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python.version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python.version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install tox coverage

    - name: Test with tox ${{ matrix.python.toxenv }}
      env:
        TOXENV: py,jose,clients,flask,django
      run: tox

    - name: Report coverage
      run: |
        coverage combine
        coverage report
        coverage xml

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        file: ./coverage.xml
        flags: unittests
        name: GitHub
