name: Ubuntu
on: [push, pull_request]

jobs:
  tests:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
        - python-version: 3.8
          env:
            TOXENV: py
        - python-version: 3.9
          env:
            TOXENV: py
        - python-version: "3.10"
          env:
            TOXENV: py
        - python-version: "3.11"
          env:
            TOXENV: py
        - python-version: "3.11"
          env:
            TOXENV: asyncio
        - python-version: pypy3.9
          env:
            TOXENV: pypy3

        # pinned deps
        - python-version: 3.7.13
          env:
            TOXENV: pinned
        - python-version: 3.7.13
          env:
            TOXENV: asyncio-pinned
        - python-version: pypy3.7
          env:
            TOXENV: pypy3-pinned

        - python-version: "3.11"
          env:
            TOXENV: extra-deps

    steps:
    - uses: actions/checkout@v3

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

    - name: Install system libraries
      if: matrix.python-version == 'pypy3.9' || 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
      run: bash <(curl -s https://codecov.io/bash)
