test_suite #5226
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: test_suite | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }} | |
cancel-in-progress: true | |
on: | |
push: | |
branches: ['**'] | |
tags: ['**'] | |
pull_request: | |
branches: ['**'] | |
schedule: | |
- cron: "0 4 * * *" | |
jobs: | |
style: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.12"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: style-0-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install ruff | |
- name: Display versions and environment information | |
run: | | |
python --version | |
which python | |
- name: Run style & documentation tests | |
run: make pep | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
python-version: ["3.9", "3.12"] # Oldest and newest supported versions | |
steps: | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-1-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install build twine | |
- uses: actions/checkout@v4 | |
- name: Build sdist | |
run: python -m build --sdist | |
- name: Check sdist | |
run: twine check --strict dist/* | |
- name: Install sdist | |
run: python -m pip install ./dist/mne_bids-* | |
- name: Clean up working directory | |
run: rm -rf ./* | |
- name: Try importing mne_bids | |
run: python -c 'import mne_bids; print(mne_bids.__version__)' | |
- name: Try cli mne_bids | |
run: mne_bids --version | |
- name: Remove sdist install | |
run: python -m pip uninstall -y mne-bids | |
- uses: actions/checkout@v4 | |
- name: Build wheel | |
run: python -m build --wheel | |
- name: Check wheel | |
run: twine check --strict dist/* | |
- name: Install wheel | |
run: python -m pip install ./dist/mne_bids-*.whl | |
- name: Clean up working directory | |
run: rm -rf ./* | |
- name: Try importing mne_bids | |
run: python -c 'import mne_bids; print(mne_bids.__version__)' | |
- name: Try cli mne_bids | |
run: mne_bids --version | |
- name: Remove wheel install | |
run: python -m pip uninstall -y mne-bids | |
- uses: actions/checkout@v4 | |
- name: Test extras install | |
run: | | |
python -m pip install .[full] | |
python -c 'import mne_bids; print(mne_bids.__version__)' | |
python -c 'import nibabel; print(nibabel.__version__)' | |
python -c 'import pybv; print(pybv.__version__)' | |
python -c 'import eeglabio; print(eeglabio.__version__)' | |
python -c 'import pymatreader; print(pymatreader.__version__)' | |
python -c 'import matplotlib; print(matplotlib.__version__)' | |
python -c 'import pandas; print(pandas.__version__)' | |
python -c 'import EDFlib; print("EDFlib has no .__version__")' | |
python -c 'import edfio; print(edfio.__version__)' | |
test: | |
# For GitHub "required" CI checks, add in branch protection: | |
# | |
# 6 checks: | |
# for each OS (ubuntu, macos, windows): | |
# 3.9 / mne-stable / full / validator-stable | |
# 3.12 / mne-stable / full / validator-stable | |
# | |
# 1 additional check for Apple Silicon (doesn't support Python 3.9): | |
# 3.12 / mne-stable / full / validator-stable | |
# | |
# 5 additional checks with alternative MNE-Python and BIDS validator versions: | |
# ubuntu / 3.12 / mne-main / full / validator-main | |
# ubuntu / 3.9 / mne-prev / full / validator-stable | |
# ubuntu / 3.12 / mne-stable / minimal / validator-stable | |
timeout-minutes: 60 | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
python-version: ["3.9", "3.12"] # Oldest and newest supported versions | |
mne-version: [mne-stable] | |
mne-bids-install: [full] | |
bids-validator-version: [validator-stable] | |
include: | |
# special test runs running only on single CI systems to save resources | |
# | |
# macOS-14 (Apple Silicon) only works with Python 3.10+ | |
# Once we drop support for Python 3.9, move it to the "proper" matrix above. | |
- os: macos-14 | |
python-version: "3.12" | |
mne-version: mne-stable | |
mne-bids-install: full | |
bids-validator-version: validator-stable | |
# Test development versions | |
- os: ubuntu-latest | |
python-version: "3.12" | |
mne-version: mne-main | |
mne-bids-install: full | |
bids-validator-version: validator-main | |
# Test previous MNE stable version | |
- os: ubuntu-latest | |
python-version: "3.9" | |
mne-version: mne-prev-stable | |
mne-bids-install: full | |
bids-validator-version: validator-stable | |
# Test minimal mne-bids install | |
- os: ubuntu-latest | |
python-version: "3.12" | |
mne-version: mne-stable | |
mne-bids-install: minimal | |
bids-validator-version: validator-stable | |
env: | |
TZ: Europe/Berlin | |
FORCE_COLOR: true | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Restore cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: test-0-${{ env.pythonLocation }}-${{ env.os }}-${{ hashFiles('pyproject.toml') }} | |
- name: Install Python dependencies using pip | |
# This would be nicer once this feature is implemented: https://github.com/pypa/pip/issues/11440 | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -e .[test] | |
- name: Install MNE (stable) | |
if: matrix.mne-version == 'mne-stable' | |
run: | | |
git clone --single-branch --branch maint/1.6 https://github.com/mne-tools/mne-python.git | |
python -m pip install -e ./mne-python | |
- name: Install MNE (previous stable) | |
if: matrix.mne-version == 'mne-prev-stable' | |
run: | | |
git clone --single-branch --branch maint/1.6 https://github.com/mne-tools/mne-python.git | |
python -m pip install -e ./mne-python | |
- name: Install MNE (main) | |
if: matrix.mne-version == 'mne-main' | |
run: | | |
git clone --single-branch --branch main https://github.com/mne-tools/mne-python.git | |
python -m pip install -e ./mne-python | |
- name: Install BIDS validator (stable) | |
if: matrix.bids-validator-version == 'validator-stable' | |
run: | | |
npm install -g bids-validator | |
echo "BIDS_VALIDATOR_BRANCH=stable" >> $GITHUB_ENV | |
- name: Download BIDS validator (main) | |
if: matrix.bids-validator-version == 'validator-main' | |
run: | | |
pushd .. | |
git clone --depth 1 https://github.com/bids-standard/bids-validator | |
popd | |
echo "BIDS_VALIDATOR_BRANCH=main" >> $GITHUB_ENV | |
- name: Install BIDS validator (main) | |
if: matrix.bids-validator-version == 'validator-main' | |
run: | | |
pushd .. | |
cd bids-validator | |
# Generate the full development node_modules | |
npm install | |
# Build & bundle the bids-validator CLI package | |
npm -w bids-validator run build | |
# Generate a package to install globally | |
npm -w bids-validator pack | |
# Install the package globally | |
bash -c "npm install -g bids-validator-*.tgz" | |
popd | |
- name: Display versions and environment information | |
run: | | |
echo $TZ | |
date | |
echo "npm"; npm --version | |
echo "node"; node --version | |
echo "bids-validator"; bids-validator --version | |
echo "python"; python --version | |
which python | |
mne sys_info | |
- name: Install MNE-BIDS (minimal) | |
if: matrix.mne-bids-install == 'minimal' | |
run: python -m pip install -e . | |
- name: Install MNE-BIDS (full) | |
if: matrix.mne-bids-install == 'full' | |
run: python -m pip install -e .[full] | |
# Only run on a limited set of jobs | |
- name: Run pytest without testing data | |
run: make test | |
if: ${{ matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' && matrix.mne-version == 'mne-main' }} | |
# Get testing data | |
- run: ./tools/get_testing_version.sh | |
working-directory: mne-python | |
shell: bash | |
name: 'Get testing version' | |
- uses: actions/cache@v4 | |
with: | |
key: ${{ env.TESTING_VERSION }} | |
path: ~/mne_data | |
name: 'Cache testing data' | |
- run: ./tools/github_actions_download.sh | |
shell: bash | |
working-directory: mne-python | |
- name: Run pytest | |
shell: bash | |
run: make test | |
- name: Upload coverage stats to codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
files: ./coverage.xml | |
build_docs: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.12"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build_docs-0-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install --upgrade https://github.com/mne-tools/mne-python/archive/refs/heads/main.zip | |
python -m pip install -e .[test,doc] | |
- name: Build the documentation | |
run: | | |
make build-doc | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: documentation | |
path: doc/_build/html |