name: Linux tests

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

jobs:
  linux-qt5:
    name: Linux Py${{ matrix.PYTHON_VERSION }} - ${{ matrix.QT_BINDING }} - ${{ matrix.QT_BINDING_VERSION }}
    timeout-minutes: 15
    runs-on: ubuntu-latest
    env:
      CI: True
      QT_API:  ${{ matrix.QT_BINDING }}
      PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }}
      RUNNER_OS: 'ubuntu'
    strategy:
      fail-fast: false
      matrix:
        PYTHON_VERSION: ['3.7', '3.10']
        QT_BINDING: ['pyqt5', 'pyside2']
        include:
          - QT_BINDING_VERSION: 'latest'
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2
      - name: Install System Packages
        run: |
          sudo apt-get update --fix-missing
          sudo apt-get install -qq pyqt5-dev-tools libxcb-xinerama0 xterm --fix-missing
      - name: Install Conda
        uses: conda-incubator/setup-miniconda@v3
        with:
           activate-environment: test
           auto-update-conda: false
           auto-activate-base: false
           python-version: ${{ matrix.PYTHON_VERSION }}
           channels: conda-forge,defaults
           channel-priority: strict
           conda-remove-defaults: true
      - name: Install dependencies
        shell: bash -l {0}
        run: conda env update --file requirements/environment_tests_${{ matrix.QT_BINDING }}_${{ matrix.QT_BINDING_VERSION }}.yml
      - name: Install Package
        shell: bash -l {0}
        run: pip install -e .
      - name: Show environment information
        shell: bash -l {0}
        run: |
          conda info
          conda list
      - name: Run tests
        shell: bash -l {0}
        run: |
          xvfb-run --auto-servernum python example.py
          xvfb-run --auto-servernum pytest -x -vv --cov-report xml --cov=qtawesome qtawesome
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        with:
          fail_ci_if_error: true
          verbose: true
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

  linux-qt6:
    name: Linux Py${{ matrix.PYTHON_VERSION }} - ${{ matrix.QT_BINDING }} - ${{ matrix.QT_BINDING_VERSION }}
    timeout-minutes: 15
    runs-on: ubuntu-latest
    env:
      CI: True
      QT_API:  ${{ matrix.QT_BINDING }}
      PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }}
      RUNNER_OS: 'ubuntu'
    strategy:
      fail-fast: false
      matrix:
        PYTHON_VERSION: ['3.9', '3.13']
        QT_BINDING: ['pyqt6', 'pyside6']
        include:
          - QT_BINDING_VERSION: 'latest'
          - PYTHON_VERSION: '3.13'  # PySide6 but specific version (6.8.3) on Python 3.13
            QT_BINDING: 'pyside6'
            QT_BINDING_VERSION: '6.8.3'
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2
      - name: Install System Packages
        run: |
          sudo apt-get update --fix-missing
          sudo apt-get install -qq pyqt6-dev-tools --fix-missing
      - name: Setup a headless display
        uses: pyvista/setup-headless-display-action@v3
        with:
          qt: true
      - name: Install Conda
        uses: conda-incubator/setup-miniconda@v3
        with:
           activate-environment: test
           auto-update-conda: false
           auto-activate-base: false
           python-version: ${{ matrix.PYTHON_VERSION }}
           channels: conda-forge,defaults
           channel-priority: strict
           conda-remove-defaults: true
      - name: Install dependencies
        shell: bash -l {0}
        run: conda env update --file requirements/environment_tests_${{ matrix.QT_BINDING }}_${{ matrix.QT_BINDING_VERSION }}.yml
      - name: Install Package
        shell: bash -l {0}
        run: pip install -e .
      - name: Show environment information
        shell: bash -l {0}
        run: |
          conda info
          conda list
      - name: Run tests
        shell: bash -l {0}
        run: |
          xvfb-run --auto-servernum python example.py
          xvfb-run --auto-servernum pytest -x -vv --cov-report xml --cov=qtawesome qtawesome
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        with:
          fail_ci_if_error: true
          verbose: true
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
