Skip to content

Commit

Permalink
Merge pull request #404 from nipreps/maint/tox
Browse files Browse the repository at this point in the history
MAINT: Automate testing with tox
  • Loading branch information
mgxd authored Oct 2, 2024
2 parents 9e4438a + 2c039c9 commit 915fb6f
Show file tree
Hide file tree
Showing 3 changed files with 186 additions and 24 deletions.
65 changes: 43 additions & 22 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@ name: Pytest

on:
push:
branches: [ '*' ]
tags: [ '*' ]
branches: ['*']
tags: ['*']
pull_request:
branches: [ master, 'maint/*' ]
branches: [master, 'maint/*']

defaults:
run:
shell: bash

env:
FORCE_COLOR: true

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
Expand All @@ -19,32 +22,50 @@ permissions:
contents: read

jobs:
build:
if: "!contains(github.event.head_commit.message, '[skip ci]')"
runs-on: ubuntu-latest
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: ['3.10', '3.11']
os: ['ubuntu-latest']
python-version: ['3.10', '3.11', '3.12']
dependencies: ['latest', 'pre']
include:
- os: ubuntu-latest
python-version: '3.10'
dependencies: 'min'

env:
DEPENDS: ${{ matrix.dependencies }}

steps:
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Install nibabies
- uses: actions/cache@v4
with:
path: ~/.cache/templateflow
key: templateflow-v1
- name: Install dependencies
run: |
python -m venv /tmp/venv
source /tmp/venv/bin/activate
python -m pip install -U pip
python -m pip install ".[test]"
- name: Run Pytest
sudo apt update
sudo apt install -y --no-install-recommends graphviz
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
run: python -c "import sys; print(sys.version)"
- name: Install tox
run: |
source /tmp/venv/bin/activate
pytest -sv --doctest-modules --cov nibabies --cov-report xml nibabies
- name: Submit coverage
uses: codecov/codecov-action@v3
python -m pip install --upgrade pip
python -m pip install tox tox-gh-actions
- name: Show tox config
run: tox c
- name: Run tox
run: tox -v --exit-and-dump-after 1200
- uses: codecov/codecov-action@v4
with:
files: coverage.xml
file: coverage.xml
token: ${{ secrets.CODECOV_TOKEN }}
if: ${{ always() }}
32 changes: 30 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ dependencies = [
"tedana >= 23.0.2",
"templateflow >= 24.2.0",
"toml",
"typing_extensions; python_version<'3.11'",
]
dynamic = ["version"]

Expand Down Expand Up @@ -71,10 +72,11 @@ maint = [
"python-Levenshtein",
]
test = [
"coverage",
"coverage[toml]",
"pytest",
"pytest-cov",
"pytest-env",
"pytest-xdist",
]
telemetry = ["migas >= 0.4.0"]
# Aliases
Expand Down Expand Up @@ -120,8 +122,22 @@ per-file-ignores = [
]

[tool.pytest.ini_options]
minversion = "6"
testpaths = ["nibabies"]
log_cli_level = "INFO"
xfail_strict = true
norecursedirs = [".git"]
addopts = "-svx --doctest-modules"
addopts = [
"-svx",
"-ra",
"--strict-config",
"--strict-markers",
"--doctest-modules",
# Config pytest-cov
"--cov=nibabies",
"--cov-report=xml",
"--cov-config=pyproject.toml",
]
doctest_optionflags = "ALLOW_UNICODE NORMALIZE_WHITESPACE ELLIPSIS"
env = "PYTHONHASHSEED=0"
filterwarnings = ["ignore::DeprecationWarning"]
Expand Down Expand Up @@ -177,3 +193,15 @@ inline-quotes = "single"

[tool.ruff.format]
quote-style = "single"

[tool.coverage.run]
branch = true
omit = [
"*/_version.py"
]

[tool.coverage.paths]
source = [
"nibabies",
"**/site-packages/nibabies"
]
113 changes: 113 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
[tox]
requires =
tox>=4
envlist =
py3{10,11,12}-latest
py310-min
py3{10,11,12}-pre
skip_missing_interpreters = true

# Configuration that allows us to split tests across GitHub runners effectively
[gh-actions]
python =
3.10: py310
3.11: py311
3.12: py312

[gh-actions:env]
DEPENDS =
min: min
latest: latest
pre: pre

[testenv]
description = Pytest with coverage
labels = test
pip_pre =
pre: true
pass_env =
# getpass.getuser() sources for Windows:
LOGNAME
USER
LNAME
USERNAME
# Pass user color preferences through
PY_COLORS
FORCE_COLOR
NO_COLOR
CLICOLOR
CLICOLOR_FORCE
PYTHON_GIL
extras = test
setenv =
pre: PIP_EXTRA_INDEX_URL=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple
deps =
min: nibabel == 4.0.1
min: nipype == 1.8.5
min: nitransforms == 21.0.0
min: numpy == 1.22
min: psutil == 5.4
min: pybids == 0.15.2
min: tedana == 23.0.2
min: templateflow == 24.1.0

commands_pre =
python scripts/fetch_templates.py
commands =
pytest --cov-report term-missing --durations=20 --durations-min=1.0 {posargs:-n auto}

[testenv:style]
description = Check our style guide
labels = check
deps =
ruff
skip_install = true
commands =
ruff check --diff
ruff format --diff

[testenv:style-fix]
description = Auto-apply style guide to the extent possible
labels = pre-release
deps =
ruff
skip_install = true
commands =
ruff check --fix
ruff format
ruff check --select ISC001

[testenv:spellcheck]
description = Check spelling
labels = check
deps =
codespell[toml]
skip_install = true
commands =
codespell . {posargs}

[testenv:build{,-strict}]
labels =
check
pre-release
deps =
build
twine
skip_install = true
set_env =
# Ignore specific known warnings:
# https://github.com/pypa/pip/issues/11684
# https://github.com/pypa/pip/issues/12243
strict: PYTHONWARNINGS=error,once:pkg_resources is deprecated as an API.:DeprecationWarning:pip._internal.metadata.importlib._envs,once:Unimplemented abstract methods {'locate_file'}:DeprecationWarning:pip._internal.metadata.importlib._dists
commands =
python -m build
python -m twine check dist/*

[testenv:publish]
depends = build
labels = release
deps =
twine
skip_install = true
commands =
python -m twine upload dist/*

0 comments on commit 915fb6f

Please sign in to comment.