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

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

jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      PYTEST_ADDOPTS: -n auto
    strategy:
      fail-fast: false
      matrix:
        include:
        - 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"
          env:
            TOXENV: py
        - python-version: "3.14"
          env:
            TOXENV: default-reactor
        - python-version: "3.14"
          env:
            TOXENV: no-reactor
        # pinned due to https://github.com/pypy/pypy/issues/5388
        - python-version: pypy3.11-7.3.20
          env:
            TOXENV: pypy3

        # pinned deps
        - python-version: "3.10.19"
          env:
            TOXENV: pinned
        - python-version: "3.10.19"
          env:
            TOXENV: default-reactor-pinned
        - python-version: "3.10.19"
          env:
            TOXENV: no-reactor-pinned
        # pinned due to https://github.com/pypy/pypy/issues/5388
        - python-version: pypy3.11-7.3.20
          env:
            TOXENV: pypy3-pinned
        - python-version: "3.10.19"
          env:
            TOXENV: extra-deps-pinned
        - python-version: "3.10.19"
          env:
            TOXENV: botocore-pinned

        - python-version: "3.14"
          env:
            TOXENV: extra-deps
        - python-version: "3.14"
          env:
            TOXENV: no-reactor-extra-deps
        # pinned due to https://github.com/pypy/pypy/issues/5388
        - python-version: pypy3.11-7.3.20
          env:
            TOXENV: pypy3-extra-deps
        - python-version: "3.14"
          env:
            TOXENV: botocore
        - python-version: "3.14"
          env:
            TOXENV: mitmproxy

    steps:
    - uses: actions/checkout@v6

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

    - name: Install system libraries
      if: contains(matrix.python-version, 'pypy') || contains(matrix.env.TOXENV, 'pinned')
      run: |
        sudo apt-get update
        sudo apt-get install libxml2-dev libxslt-dev

    - name: Run tests
      env: ${{ matrix.env }}
      run: |
        pip install -U tox
        tox

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

    - name: Upload test results
      if: ${{ !cancelled() }}
      uses: codecov/codecov-action@v5
      with:
        report_type: test_results
