Skip to content

Add hooks for toga #559

Add hooks for toga

Add hooks for toga #559

Workflow file for this run

name: Pull Request CI
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
workflow_dispatch:
pull_request:
paths:
- requirements-test-libraries.txt
env:
# Colored pytest output on CI despite not having a tty
FORCE_COLOR: 1
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: [3.8, 3.9, '3.10', '3.11']
pyinstaller: ["https://github.com/pyinstaller/pyinstaller/archive/develop.zip"]
os: ["macos-12", "ubuntu-22.04", "windows-latest"]
fail-fast: false
env:
# Rebuild bootloader when installing PyInstaller from develop branch
PYINSTALLER_COMPILE_BOOTLOADER: 1
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Limit dependencies to only new/changed libraries.
if: "${{ github.event.pull_request }}"
shell: bash
run: |
git fetch origin ${{ github.base_ref }}
set +e
# NOTE: we need to be compatible with both GNU diff and Apple/FreeBSD diff
diff \
<(git show origin/${{ github.base_ref }}:requirements-test-libraries.txt) \
<(git show HEAD:requirements-test-libraries.txt) \
| grep -E "^>" | sed "s/^> //" \
> requirements-test-libraries.txt
set -e
echo '-r requirements-test.txt' >> requirements-test-libraries.txt
if grep -q pyqtgraph requirements-test-libraries.txt ; then echo PyQt5 >> requirements-test-libraries.txt ;fi
# NOTE: specify minimum allowed version for sudachidict-* packages, to prevent pip from installing invalid
# SudachiDict_full-0.0.0-py3-none-any.whl due to --prefer-binary switch used with pip install...
if grep -q sudachipy requirements-test-libraries.txt; then
echo "sudachidict-small>=20230927" >> requirements-test-libraries.txt;
echo "sudachidict-core>=20230927" >> requirements-test-libraries.txt;
echo "sudachidict-full>=20230927" >> requirements-test-libraries.txt;
fi
# pythainlp requires python-crfsuite, but fails to declare it as a requirement.
if grep -q pythainlp requirements-test-libraries.txt ; then echo python-crfsuite >> requirements-test-libraries.txt; fi
# tests for various trame-* packages require base trame package as well
if grep -q 'trame-.*' requirements-test-libraries.txt; then echo trame >> requirements-test-libraries.txt; fi
if grep -q trame-vtk requirements-test-libraries.txt; then
echo vtk >> requirements-test-libraries.txt;
echo pyvista >> requirements-test-libraries.txt;
echo nest-asyncio >> requirements-test-libraries.txt;
echo trame-vuetify >> requirements-test-libraries.txt;
fi
if grep -q trame-mesh-streamer requirements-test-libraries.txt; then echo vtk >> requirements-test-libraries.txt; fi
# test_xarray_chunk requires dask in addition to xarray
if grep -q xarray requirements-test-libraries.txt; then echo dask >> requirements-test-libraries.txt; fi
cat requirements-test-libraries.txt
- name: Set up .NET Core for pythonnet tests
uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.x'
# Install MariaDB Connector/C from official MariaDB Community Server
# repository. The version shipped with ubuntu-20.04 is too old for
# the "mariadb" python package.
- name: Install MariaDB Connector/C
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y wget apt-transport-https
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
echo "6083ef1974d11f49d42ae668fb9d513f7dc2c6276ffa47caed488c4b47268593 mariadb_repo_setup" | sha256sum -c -
chmod +x mariadb_repo_setup
sudo ./mariadb_repo_setup
sudo apt-get install -y libmariadb3 libmariadb-dev
- name: Install apt dependencies
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
# Set up a virtual screen (for GUI libraries and pynput).
sudo apt-get install libxcb-xkb-dev xvfb
Xvfb :99 & echo "DISPLAY=:99" >> $GITHUB_ENV
# Install PyQt5 (qtmodern) dependencies.
sudo apt-get install -y libxcb-image0 libxcb-keysyms1 libxcb-render-util0 \
libxkbcommon-x11-0 libxcb-icccm4 libxcb1 openssl \
libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev \
libxcb-shape0-dev libxcb-xkb-dev libopengl0 libegl1 \
libpulse0 libpulse-mainloop-glib0
# Install cairo dependencies.
sudo apt-get install -y libcairo2
# Install libdiscid (dependency of discid python package).
sudo apt-get install -y libdiscid0
# These are dependencies of gmsh
sudo apt-get install -y libglu1 libgl1 libxrender1 libxcursor1 libxft2 \
libxinerama1 libgomp1
# Required by PyGObject (dependency of toga/toga-gtk)
sudo apt-get install -y gir1.2-gtk-3.0 libgirepository1.0-dev
- name: Install brew dependencies
if: startsWith(matrix.os, 'macos')
run: |
# Install cairo dependencies.
brew install cairo
# Install pango dependencies (weasyprint hook).
brew install pango
# Install libdiscid (dependency of discid python package).
brew install libdiscid
# Install lsl library for pylsl
brew install labstreaminglayer/tap/lsl
# This one is required by eccodes (binary wheels with bundled eccodes
# library are provided only for macOS 13+).
brew install eccodes
- name: Install dependencies
shell: bash
run: |
# Upgrade to the latest pip.
python -m pip install -U pip "setuptools<71.0.0" wheel
# Install hooks-contrib
pip install -e .
pip install --prefer-binary -r requirements-test-libraries.txt
# Install PyInstaller
pip install ${{ matrix.pyinstaller }}
- name: Run tests
run: pytest -v
# Conditionally enable slow tests, so that they are ran only if
# their corresponding packages are explicitly installed but not
# if they are installed as dependencies of some other package.
- name: Check if slow tests are required (scikit-learn)
id: check-scikit-learn
shell: bash
run: |
grep -E "scikit-learn" requirements-test-libraries.txt && echo "AVAILABLE=yes" >> $GITHUB_OUTPUT || echo "AVAILABLE=no" >> $GITHUB_OUTPUT
- name: Run slow tests (scikit-learn)
if: ${{ steps.check-scikit-learn.outputs.AVAILABLE == 'yes' }}
run: pytest -v -m slow -k sklearn
- name: Check if slow tests are required (scikit-image)
id: check-scikit-image
shell: bash
run: |
grep -E "scikit-image" requirements-test-libraries.txt && echo "AVAILABLE=yes" >> $GITHUB_OUTPUT || echo "AVAILABLE=no" >> $GITHUB_OUTPUT
- name: Run slow tests (scikit-image)
if: ${{ steps.check-scikit-image.outputs.AVAILABLE == 'yes' }}
run: pytest -v -m slow -k skimage