name: Test

on:
    push:
        branches: [main]
    pull_request:
        branches: [main]

concurrency:
    group: ${{ github.workflow }}-${{ github.ref }}
    cancel-in-progress: true

jobs:
    test:
        runs-on: ${{ matrix.os }}
        defaults:
            run:
                shell: bash -e {0} # -e to fail on error

        strategy:
            fail-fast: false
            matrix:
                include:
                    - os: ubuntu-latest
                      python: "3.10"
                    - os: ubuntu-latest
                      python: "3.13"
                    - os: ubuntu-latest
                      python: "3.13"
                      pip-flags: "--pre"

        env:
            OS: ${{ matrix.os }}
            PYTHON: ${{ matrix.python }}

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

            - name: Install test dependencies
              run: python -m pip install --upgrade uv wheel
            - name: Install dependencies
              run: uv pip install --system ${{ matrix.pip-flags }} .[dev,test]

            - name: Test
              env:
                  MPLBACKEND: agg
                  PLATFORM: ${{ matrix.os }}
                  DISPLAY: :42
              run: pytest -v --cov --color=yes

            - name: Upload coverage
              uses: codecov/codecov-action@v3
