name: Tests

on:
  push:
    branches:
    - master
    - '[0-9]+.[0-9]+'
  pull_request:

jobs:
  tests-ubuntu:
    name: "Test: ${{ matrix.python-version }}, Ubuntu"
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
        - python-version: "3.9"
          env:
            TOXENV: min-attrs
        - python-version: "3.9"
          env:
            TOXENV: min-pydantic
        - python-version: "3.9"
          env:
            TOXENV: min-scrapy
        - python-version: "3.9"
          env:
            TOXENV: min-extra
        - python-version: "3.9"
          env:
            TOXENV: py
        - python-version: "3.10"
          env:
            TOXENV: py
        - python-version: "3.11"
          env:
            TOXENV: py
        - python-version: "3.12"
          env:
            TOXENV: py
        - python-version: "3.13"
          env:
            TOXENV: py
        - python-version: "3.14.0-rc.2"
          env:
            TOXENV: py
        - python-version: "3.14.0-rc.2"
          env:
            TOXENV: attrs
        # pydantic doesn't yet support 3.14
        - python-version: "3.13"
          env:
            TOXENV: pydantic
        - python-version: "3.14.0-rc.2"
          env:
            TOXENV: scrapy
        # pydantic doesn't yet support 3.14
        - python-version: "3.13"
          env:
            TOXENV: extra
        - python-version: "pypy3.11"
          env:
            TOXENV: py

        # pydantic1 won't support 3.14
        - python-version: "3.13"
          env:
            TOXENV: pydantic1
        - python-version: "3.13"
          env:
            TOXENV: extra-pydantic1


    steps:
    - uses: actions/checkout@v5

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v6
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install tox
      run: pip install tox

    - name: Run tests
      env: ${{ matrix.env }}
      run: tox

    - name: Upload coverage report
      uses: codecov/codecov-action@v5

  tests-other-os:
    name: "Test: py39, ${{ matrix.os }}"
    runs-on: "${{ matrix.os }}"
    strategy:
      matrix:
        os: [macos-latest, windows-latest]

    steps:
    - uses: actions/checkout@v5

    - name: Set up Python
      uses: actions/setup-python@v6
      with:
        python-version: 3.9

    - name: Install tox
      run: pip install tox

    - name: Run tests
      run: tox -e py

    - name: Upload coverage report
      uses: codecov/codecov-action@v5
