name: test

on: [push, pull_request]

# Cancel running jobs for the same workflow and branch.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  package:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build and Check Package
        uses: hynek/build-and-inspect-python-package@v1.5

  test:

    needs: [package]

    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false

      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
        qt-lib: [pyqt5, pyqt6, pyside2, pyside6]
        os: [ubuntu-latest, windows-latest, macos-latest]
        exclude:
          # Not installable:
          # ERROR: Could not find a version that satisfies the requirement pyside2 (from versions: none)
          - python-version: "3.11"
            qt-lib: pyside2
            os: windows-latest
          - python-version: "3.12"
            qt-lib: pyside2

    steps:
    - uses: actions/checkout@v3

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

    - name: Download Package
      uses: actions/download-artifact@v3
      with:
        name: Packages
        path: dist

    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install tox
        if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then
          sudo apt-get update -y
          sudo apt-get install -y libgles2-mesa-dev
        fi
      shell: bash

    - name: Test
      shell: bash
      run: |
        tox -e py-${{ matrix.qt-lib }} --installpkg `find dist/*.tar.gz` -- -ra
