name: Test
on: [push, pull_request]

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ['3.9', '3.10', '3.11', '3.12.3', '3.13.0', pypy-3.9]
        exclude:
          - os: windows-latest
            python-version: pypy-3.9
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install Test dependencies
        run: pip install tox
      - name: Test
        run: tox -e py
      - name: Install Coveralls
        if: github.event_name == 'push'
        run: pip install coveralls
      - name: Upload coverage to Coveralls
        if: github.event_name == 'push'
        env:
          COVERALLS_PARALLEL: true
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: coveralls --service=github

  coveralls-finish:
    needs: test
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v5
        with:
          python-version: 3.x
      - name: Install Coveralls
        run: pip install coveralls
      - name: Finish Coveralls parallel builds
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: coveralls --service=github --finish

  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - name: Install tox
        run: pip install tox
      - name: Lint
        run: tox -e flake8,mypy,isort
