Skip to content

test_suite

test_suite #168

Workflow file for this run

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