name: Ubuntu
on:
- pull_request
- push
jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    - uses: actions/setup-python@v6
      with:
        python-version: "3.14"
    - uses: pre-commit/action@v3.0.1

  tests:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
        - python-version: '3.14'  # Keep in sync with .readthedocs.yml
          env:
            TOXENV: docs
        - python-version: '3.14'
          env:
            TOXENV: pylint
        - python-version: '3.14'
          env:
            TOXENV: twinecheck
        - python-version: '3.14'
          env:
            TOXENV: typing

        - python-version: '3.10'
          env:
            TOXENV: py
        - python-version: '3.10'
          env:
            TOXENV: extra-deps
        - 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: pypy-3.11
          env:
            TOXENV: py
    steps:
      - uses: actions/checkout@v6
      - name: Install system libraries
        if: contains(matrix.python-version, 'pypy')
        run: |
          sudo apt-get update
          sudo apt-get install libxml2-dev libxslt-dev
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install --upgrade tox codecov
      - name: Run tests
        env: ${{ matrix.env }}
        run: tox
      - name: Publish coverage data
        uses: codecov/codecov-action@v5
