Bump actions/setup-python from 1 to 5 #8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: | |
push: | |
branches-ignore: | |
- auto-backport-of-pr-[0-9]+ | |
- v[0-9]+.[0-9]+.[0-9x]+-doc | |
pull_request: | |
env: | |
NO_AT_BRIDGE: 1 # Necessary for GTK3 interactive test. | |
OPENBLAS_NUM_THREADS: 1 | |
PYTHONFAULTHANDLER: 1 | |
jobs: | |
test: | |
name: "Python ${{ matrix.python-version }} on ${{ matrix.os }} ${{ matrix.name-suffix }}" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name-suffix: "(Minimum Versions)" | |
os: ubuntu-18.04 | |
python-version: 3.7 | |
extra-requirements: '-c requirements/testing/minver.txt' | |
pyqt5-ver: '==5.8 sip==4.19.7' # oldest versions with a Py3.7 wheel. | |
delete-font-cache: true | |
XVFB_RUN: xvfb-run -a | |
- os: ubuntu-18.04 | |
python-version: 3.7 | |
extra-requirements: '-r requirements/testing/extra.txt' | |
XVFB_RUN: xvfb-run -a | |
CFLAGS: "-fno-lto" # Ensure that disabling LTO works. | |
- os: ubuntu-18.04 | |
python-version: 3.8 | |
extra-requirements: '-r requirements/testing/extra.txt' | |
XVFB_RUN: xvfb-run -a | |
- os: ubuntu-20.04 | |
python-version: 3.9 | |
extra-requirements: '-r requirements/testing/extra.txt' | |
XVFB_RUN: xvfb-run -a | |
- os: ubuntu-20.04 | |
python-version: '3.10-dev' | |
# Re-add this when extra dependencies have wheels. | |
# extra-requirements: '-r requirements/testing/extra.txt' | |
XVFB_RUN: xvfb-run -a | |
- os: macos-latest | |
python-version: 3.8 | |
XVFB_RUN: "" | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install OS dependencies | |
run: | | |
case "${{ runner.os }}" in | |
Linux) | |
sudo apt-get update -yy | |
sudo apt-get install -yy \ | |
ccache \ | |
cm-super \ | |
dvipng \ | |
ffmpeg \ | |
fonts-noto-cjk \ | |
gdb \ | |
gir1.2-gtk-3.0 \ | |
graphviz \ | |
inkscape \ | |
lcov \ | |
libcairo2 \ | |
libcairo2-dev \ | |
libffi-dev \ | |
libgeos-dev \ | |
libgirepository1.0-dev \ | |
libsdl2-2.0-0 \ | |
libxkbcommon-x11-0 \ | |
libxcb-icccm4 \ | |
libxcb-image0 \ | |
libxcb-keysyms1 \ | |
libxcb-randr0 \ | |
libxcb-render-util0 \ | |
libxcb-xinerama0 \ | |
lmodern \ | |
fonts-freefont-otf \ | |
texlive-pictures \ | |
pkg-config \ | |
qtbase5-dev \ | |
texlive-fonts-recommended \ | |
texlive-latex-base \ | |
texlive-latex-extra \ | |
texlive-latex-recommended \ | |
texlive-luatex \ | |
texlive-xetex \ | |
ttf-wqy-zenhei | |
if [[ "${{ matrix.os }}" = ubuntu-20.04 ]]; then | |
sudo apt install -yy libopengl0 | |
fi | |
;; | |
macOS) | |
brew install ccache | |
brew tap homebrew/cask-fonts | |
brew install font-noto-sans-cjk-sc | |
;; | |
esac | |
- name: Cache pip | |
uses: actions/cache@v2 | |
if: startsWith(runner.os, 'Linux') | |
with: | |
path: ~/.cache/pip | |
key: ${{ matrix.os }}-py${{ matrix.python-version }}-pip-${{ hashFiles('requirements/*/*.txt') }} | |
restore-keys: | | |
${{ matrix.os }}-py${{ matrix.python-version }}-pip- | |
- name: Cache pip | |
uses: actions/cache@v2 | |
if: startsWith(runner.os, 'macOS') | |
with: | |
path: ~/Library/Caches/pip | |
key: ${{ matrix.os }}-py${{ matrix.python-version }}-pip-${{ hashFiles('requirements/*/*.txt') }} | |
restore-keys: | | |
${{ matrix.os }}-py${{ matrix.python-version }}-pip- | |
- name: Cache ccache | |
uses: actions/cache@v2 | |
with: | |
path: | | |
~/.ccache | |
key: ${{ matrix.os }}-py${{ matrix.python-version }}-ccache-${{ hashFiles('src/*') }} | |
restore-keys: | | |
${{ matrix.os }}-py${{ matrix.python-version }}-ccache- | |
- name: Cache Matplotlib | |
uses: actions/cache@v2 | |
with: | |
path: | | |
~/.cache/matplotlib | |
!~/.cache/matplotlib/tex.cache | |
!~/.cache/matplotlib/test_cache | |
key: 1-${{ runner.os }}-py${{ matrix.python-version }}-mpl-${{ github.ref }}-${{ github.sha }} | |
restore-keys: | | |
1-${{ runner.os }}-py${{ matrix.python-version }}-mpl-${{ github.ref }}- | |
1-${{ runner.os }}-py${{ matrix.python-version }}-mpl- | |
- name: Install Python dependencies | |
run: | | |
# Upgrade pip and setuptools and wheel to get as clean an install as | |
# possible. | |
python -m pip install --upgrade pip setuptools wheel | |
# Install dependencies from PyPI. | |
python -m pip install --upgrade $PRE \ | |
cycler fonttools kiwisolver numpy packaging pillow pyparsing \ | |
python-dateutil setuptools-scm \ | |
-r requirements/testing/all.txt \ | |
${{ matrix.extra-requirements }} | |
# Install optional dependencies from PyPI. | |
# Sphinx is needed to run sphinxext tests | |
python -m pip install --upgrade sphinx | |
# GUI toolkits are pip-installable only for some versions of Python | |
# so don't fail if we can't install them. Make it easier to check | |
# whether the install was successful by trying to import the toolkit | |
# (sometimes, the install appears to be successful but shared | |
# libraries cannot be loaded at runtime, so an actual import is a | |
# better check). | |
# PyGObject, pycairo, and cariocffi do not install on OSX 10.12. | |
python -m pip install --upgrade pycairo 'cairocffi>=0.8' PyGObject && | |
python -c 'import gi; gi.require_version("Gtk", "3.0"); from gi.repository import Gtk' && | |
echo 'PyGObject is available' || | |
echo 'PyGObject is not available' | |
# There are no functioning wheels available for OSX 10.12 (as of | |
# Sept 2020) for either pyqt5 (there are only wheels for 10.13+) or | |
# pyside2 (the latest version (5.13.2) with 10.12 wheels has a | |
# fatal to us bug, it was fixed in 5.14.0 which has 10.13 wheels) | |
python -mpip install --upgrade pyqt5${{ matrix.pyqt5-ver }} && | |
python -c 'import PyQt5.QtCore' && | |
echo 'PyQt5 is available' || | |
echo 'PyQt5 is not available' | |
if [[ "${{ runner.os }}" != 'macOS' ]]; then | |
python -mpip install --upgrade pyside2 && | |
python -c 'import PySide2.QtCore' && | |
echo 'PySide2 is available' || | |
echo 'PySide2 is not available' | |
fi | |
# Qt6 crashes on Github's ubuntu 18.04 runner. | |
if [[ "${{ matrix.os }}" = ubuntu-20.04 ]]; then | |
python -mpip install --upgrade pyqt6 && | |
python -c 'import PyQt6.QtCore' && | |
echo 'PyQt6 is available' || | |
echo 'PyQt6 is not available' | |
python -mpip install --upgrade pyside6 && | |
python -c 'import PySide6.QtCore' && | |
echo 'PySide6 is available' || | |
echo 'PySide6 is not available' | |
fi | |
python -mpip install --upgrade \ | |
-f "https://extras.wxpython.org/wxPython4/extras/linux/gtk3/${{ matrix.os }}" \ | |
wxPython && | |
python -c 'import wx' && | |
echo 'wxPython is available' || | |
echo 'wxPython is not available' | |
- name: Install Matplotlib | |
run: | | |
ccache -s | |
git describe | |
# Set flag in a delayed manner to avoid issues with installing other | |
# packages | |
if [[ "${{ runner.os }}" != 'macOS' ]]; then | |
if [[ "$(lsb_release -r -s)" == "20.04" ]]; then | |
export CPPFLAGS='--coverage -fprofile-abs-path' | |
else | |
export CPPFLAGS='--coverage' | |
fi | |
fi | |
# All dependencies must have been pre-installed, so that the minver | |
# constraints are held. | |
python -m pip install --no-deps -e . | |
if [[ "${{ runner.os }}" != 'macOS' ]]; then | |
unset CPPFLAGS | |
fi | |
- name: Clear font cache | |
run: | | |
rm -rf ~/.cache/matplotlib | |
if: matrix.delete-font-cache | |
- name: Run pytest | |
run: | | |
${{ matrix.XVFB_RUN }} python -mpytest -raR -n auto \ | |
--maxfail=50 --timeout=300 --durations=25 \ | |
--cov-report=xml --cov=lib --log-level=DEBUG | |
- name: Filter C coverage | |
run: | | |
lcov --capture --directory . --output-file coverage.info | |
lcov --output-file coverage.info \ | |
--extract coverage.info $PWD/src/'*' $PWD/lib/'*' | |
lcov --list coverage.info | |
find . -name '*.gc*' -delete | |
if: ${{ runner.os != 'macOS' }} | |
- name: Upload code coverage | |
uses: codecov/codecov-action@v2 | |
- uses: actions/upload-artifact@v2 | |
if: failure() | |
with: | |
name: "${{ matrix.python-version }} ${{ matrix.os }} ${{ matrix.name-suffix }} result images" | |
path: ./result_images |