---
name: Tests

on: [push, pull_request, workflow_dispatch]

env:
  FORCE_COLOR: 1

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  # cancel all except push to main branch to have always full results
  cancel-in-progress: ${{ !(github.event_name == 'push' && github.ref == 'refs/heads/main') }}

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        # when adding new versions, update the one used to test
        # friend projects below to the latest stable
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
        os: [ubuntu-latest, macos-latest, windows-latest]
        test-set: [base]
        include:
          - {python-version: "3.13", os: ubuntu-latest, test-set: friend-projects}
          - {python-version: "3.13", os: windows-latest, test-set: friend-projects}

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true
          cache: pip
          cache-dependency-path: .github/workflows/tests.yml

      - name: Install dependencies
        run: |
          pip install -U pip
          pip install -U tox

      - name: Download more tests from friend projects
        if: matrix.test-set == 'friend-projects'
        run: sh download-more-tests.sh
      - name: Tox tests
        run: |
          tox -e py

      - name: Upload coverage
        uses: codecov/codecov-action@v4
        with:
          flags: ${{ matrix.os }}
          name: ${{ matrix.os }} Python ${{ matrix.python-version }}
