Skip to content

CIs

CIs #1524

Workflow file for this run

name: CIs
concurrency:
group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.type }}
cancel-in-progress: true
on: # yamllint disable-line rule:truthy
pull_request:
push:
branches: [main]
schedule:
- cron: "0 4 * * 1" # At 04:00 on Monday
jobs:
pytest:
strategy:
fail-fast: false
matrix:
os: [ubuntu, windows, macos]
mne: [main, maint/1.7]
opengl: ['opengl']
python: ['3.12']
name: [matrix]
pip: ['']
include:
- os: ubuntu
mne: main
opengl: ''
python: '3.12'
name: no opengl
- os: ubuntu
mne: maint/1.7
opengl: ''
python: '3.12'
name: no opengl
- os: ubuntu
mne: maint/1.5
opengl: 'opengl'
python: '3.10'
name: old
- os: ubuntu
mne: main
opengl: 'opengl'
python: '3.12'
pip: pre
name: pip-pre
name: pytest ${{ matrix.name }} / ${{ matrix.os }} / MNE ${{ matrix.mne }}
runs-on: ${{ matrix.os }}-latest
env:
MNE_LOGGING_LEVEL: 'warning'
MKL_NUM_THREADS: '1'
PYTHONUNBUFFERED: '1'
MNE_BRANCH: ${{ matrix.mne }}
PYTHON_VERSION: ${{ matrix.python }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install dependencies
run: | # use MNE main to ensure test files are available
set -eo pipefail
python -m pip install --upgrade pip
git clone -b ${MNE_BRANCH} --single-branch --branch main https://github.com/mne-tools/mne-python.git ../mne-python
python -m pip install -qe ../mne-python
if [[ "${{ matrix.opengl }}" == "opengl" ]]; then
PIP_OPTION="[opengl,tests]"
else
PIP_OPTION="[tests]"
fi
python -m pip install -ve .${PIP_OPTION} "PyQt6!=6.6.1" "PyQt6-Qt6!=6.6.1,!=6.6.2,!=6.6.3"
if [[ "${{ matrix.pip }}" == "pre" ]]; then
echo "Upgrading to pre-release NumPy, SciPy, matplotlib, and pyqtgraph"
python -m pip install --upgrade --pre --only-binary ":all:" --default-timeout=60 --extra-index-url "https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" "numpy>=2.0.0.dev0" "scipy>=1.14.0.dev0" "matplotlib>=3.9.0.dev0" "scikit-learn>=1.5.dev0" "git+https://github.com/pyqtgraph/pyqtgraph.git"
fi
- run: ./tools/get_testing_version.sh
working-directory: ../mne-python
- uses: actions/cache@v4
with:
key: ${{ env.TESTING_VERSION }}
path: ~/mne_data
- run: python -c 'import mne; print(mne.datasets.testing.data_path(verbose=True))'
name: 'Download testing data'
- uses: pyvista/setup-headless-display-action@main
with:
qt: true
- run: glxinfo | grep enderer
name: Check OpenGL
working-directory: ../mne-python
if: runner.os == 'Linux' && contains(matrix.opengl, 'opengl')
- run: mne sys_info
- run: pytest -m pgtest --cov=mne_qt_browser --cov-report=xml ../mne-python/mne/report ../mne-python/mne/viz
name: Run MNE-Tests
- run: pytest --error-for-skips mne_qt_browser/tests/test_pg_specific.py --cov-report=xml --cov-append
name: Run pyqtgraph-specific tests
# These are slow on macOS, so skip them
- run: pytest mne_qt_browser/tests/test_speed.py --cov-report=xml --cov-append
name: Run benchmarks
if: runner.os != 'macOS'
- uses: codecov/codecov-action@v4
if: always()
with:
token: ${{ secrets.CODECOV_TOKEN }}
qt:
strategy:
fail-fast: false
matrix:
os: [ubuntu]
mne: [main]
opengl: [opengl]
qt: [PyQt5, PyQt6, PySide6]
python: ['3.10'] # When going to 3.11, PySide2 should be removed or special-cased
name: [matrix]
include:
- os: macos
mne: main
opengl: 'opengl'
qt: PySide6
python: '3.11'
- os: windows
mne: main
opengl: 'opengl'
qt: PySide6
python: '3.11'
name: ${{ matrix.qt }} / ${{ matrix.os }}
runs-on: ${{ matrix.os }}-latest
env:
MNE_LOGGING_LEVEL: 'warning'
MKL_NUM_THREADS: '1'
PYTHONUNBUFFERED: '1'
MNE_BRANCH: ${{ matrix.mne }}
PYTHON_VERSION: ${{ matrix.python }}
QT_LIB: ${{ matrix.qt }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install dependencies
run: | # use MNE main to ensure test files are available
set -eo pipefail
python -m pip install --upgrade pip
git clone -b ${MNE_BRANCH} --single-branch --branch main https://github.com/mne-tools/mne-python.git ../mne-python
python -m pip install -qe ../mne-python
# Avoid a problematic version of PySide6
# https://wiki.qt.io/Qt_for_Python_Development_Notes#1._Juni_2023
if [[ "$QT_LIB" == "PySide6" ]]; then
QT_LIB_INSTALL="PySide6!=6.5.1,!=6.7.0,!=6.7.1,!=6.8.0,!=6.8.0.1"
else
QT_LIB_INSTALL="$QT_LIB"
fi
if [[ "${{ matrix.opengl }}" == "opengl" ]]; then
PIP_OPTION="[opengl,tests]"
else
PIP_OPTION="[tests]"
fi
python -m pip install -ve .${PIP_OPTION} ${QT_LIB_INSTALL}
- run: bash ./tools/get_testing_version.sh
working-directory: ../mne-python
- uses: actions/cache@v4
with:
key: ${{ env.TESTING_VERSION }}
path: ~/mne_data
- run: python -c 'import mne; print(mne.datasets.testing.data_path(verbose=True))'
name: 'Download testing data'
- uses: pyvista/setup-headless-display-action@main
with:
qt: true
- name: Start Qt on its own
run: LD_DEBUG=libs python -c "from ${QT_LIB}.QtWidgets import QApplication, QWidget; app = QApplication([]); import matplotlib; matplotlib.use('QtAgg'); import matplotlib.pyplot as plt; plt.figure()"
- name: Check Qt
run: |
mne sys_info -pd
echo ${QT_LIB}:
mne sys_info -pd | grep "^.*qtpy.*${QT_LIB}=.*$"
- run: pytest -m pgtest --cov=mne_qt_browser --cov-report=xml ../mne-python/mne/report ../mne-python/mne/viz
name: Run MNE-Tests
- run: pytest --error-for-skips mne_qt_browser/tests/test_pg_specific.py --cov-report=xml --cov-append
name: Run pyqtgraph-specific tests
# For some reason this dies on Linux PySide2. We can live without this
# case given our primary target moving forward is Qt6+
- run: pytest mne_qt_browser/tests/test_speed.py --cov-report=xml --cov-append
name: Run benchmarks
if: runner.os != 'Linux' || matrix.qt != 'PyQt5'
- uses: codecov/codecov-action@v4
if: always()
with:
token: ${{ secrets.CODECOV_TOKEN }}