Skip to content

Python package

Python package #2029

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python package
on:
push:
branches: [ '**' ]
tags: [ '*' ]
pull_request:
branches: [ master, 'maint/*' ]
schedule:
- cron: '0 0 * * *'
concurrency:
group: python-${{ github.ref }}
cancel-in-progress: true
jobs:
job_metadata:
if: github.repository == 'nipreps/niworkflows'
runs-on: ubuntu-latest
outputs:
commit_message: ${{ steps.get_commit_message.outputs.commit_message }}
version: ${{ steps.show_version.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Print head git commit message
id: get_commit_message
run: |
if [[ -z "$COMMIT_MSG" ]]; then
COMMIT_MSG=$(git show -s --format=%s $REF)
fi
echo commit_message=$COMMIT_MSG | tee -a $GITHUB_OUTPUT
env:
COMMIT_MSG: ${{ github.event.head_commit.message }}
REF: ${{ github.event.pull_request.head.sha }}
- name: Detect version
id: show_version
run: |
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
VERSION=${GITHUB_REF##*/}
else
pipx run hatch version # Once to avoid output of initial setup
VERSION=$( pipx run hatch version )
fi
echo version=$VERSION | tee -a $GITHUB_OUTPUT
build:
if: github.repository == 'nipreps/niworkflows'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python 3
uses: actions/setup-python@v5
with:
python-version: 3
- name: Display Python version
run: python -c "import sys; print(sys.version)"
- name: Build niworkflows
run: pipx run build
- name: Check distributions
run: pipx run twine check dist/*
- uses: actions/upload-artifact@v3
with:
name: dist
path: dist/
get_data:
if: github.repository == 'nipreps/niworkflows'
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- name: Create test data directory
run: mkdir -p $HOME/.cache/stanford-crn
- name: Load test data cache
uses: actions/cache@v4
id: stanford-crn
with:
path: ~/.cache/stanford-crn/
key: data-v0-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
data-v0-${{ github.ref_name }}-
data-v0-
- name: Setup conda
uses: conda-incubator/setup-miniconda@v3
with:
auto-activate-base: true
activate-environment: ""
- name: Verify environment
run: |
conda info
which python
- name: Install datalad
run: |
python -m pip install datalad-installer
datalad-installer --sudo ok git-annex
python -m pip install datalad datalad-osf
datalad wtf
- name: Pacify git
run: |
git config --global user.email "[email protected]"
git config --global user.name "Niworkflows Action"
- name: Fetch test data
run: |
DS=$HOME/.cache/stanford-crn
datalad install -r -s https://github.com/nipreps-data/niworkflows-data.git $DS
cd $DS
git -C BIDS-examples-1-enh-ds054 checkout enh/ds054
datalad update -r --merge -d .
datalad get -J 2 -r ds000003 ds000030/sub-10228/func
test:
needs: [build, get_data, job_metadata]
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
install: [repo]
include:
- python-version: "3.11"
install: sdist
- python-version: "3.11"
install: wheel
- python-version: "3.11"
install: editable
env:
INSTALL_TYPE: ${{ matrix.install }}
steps:
- uses: actions/checkout@v4
if: matrix.install == 'repo' || matrix.install == 'editable'
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Load test data cache
uses: actions/cache@v4
id: stanford-crn
with:
path: ~/.cache/stanford-crn/
key: data-v0-${{ github.ref_name }}-${{ github.sha }}
- name: Load TemplateFlow cache
uses: actions/cache@v4
id: templateflow
with:
path: ~/.cache/templateflow
key: templateflow-v0-${{ github.ref_name }}-${{ strategy.job-index }}-${{ github.sha }}
restore-keys: |
templateflow-v0-${{ github.ref_name }}-
templateflow-v0-
- name: Fetch packages
if: matrix.install == 'sdist' || matrix.install == 'wheel'
uses: actions/download-artifact@v3
with:
name: dist
path: dist/
- name: Select archive
run: |
if [ "$INSTALL_TYPE" = "sdist" ]; then
ARCHIVE=$( ls dist/*.tar.gz )
elif [ "$INSTALL_TYPE" = "wheel" ]; then
ARCHIVE=$( ls dist/*.whl )
elif [ "$INSTALL_TYPE" = "repo" ]; then
ARCHIVE="."
elif [ "$INSTALL_TYPE" = "editable" ]; then
ARCHIVE="-e ."
fi
echo "ARCHIVE=$ARCHIVE" | tee -a $GITHUB_ENV
- name: Install package
run: python -m pip install $ARCHIVE
- name: Check version
run: |
INSTALLED_VERSION=$(python -c 'import niworkflows; print(niworkflows.__version__, end="")')
echo "INSTALLED: \"${INSTALLED_VERSION}\""
test "${INSTALLED_VERSION}" = "${VERSION}"
env:
VERSION: ${{ needs.job_metadata.outputs.version }}
- name: Install test dependencies
run: python -m pip install "niworkflows[tests]"
- name: Run tests
run: pytest -sv --doctest-modules --cov niworkflows --pyargs niworkflows
- uses: codecov/codecov-action@v4
name: Submit to CodeCov
with:
token: ${{ secrets.CODECOV_TOKEN }}
test-pre:
needs: [get_data, job_metadata]
if: ${{ !contains(needs.job_metadata.outputs.commit_message, '[skip pre]') }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
install: [repo]
pip-flags: ['--pre']
env:
INSTALL_TYPE: ${{ matrix.install }}
PIP_FLAGS: ${{ matrix.pip-flags }}
steps:
- name: Debug commit message
run: echo "${{ needs.job_metadata.outputs.commit_message }}"
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Load test data cache
uses: actions/cache@v4
id: stanford-crn
with:
path: ~/.cache/stanford-crn/
key: data-v0-${{ github.ref_name }}-${{ github.sha }}
- name: Load TemplateFlow cache
uses: actions/cache@v4
id: templateflow
with:
path: ~/.cache/templateflow
key: templateflow-v0-${{ github.ref_name }}-${{ strategy.job-index }}-${{ github.sha }}
restore-keys: |
templateflow-v0-${{ github.ref_name }}-
templateflow-v0-
- name: Install package
run: python -m pip install $PIP_FLAGS .
- name: Check version
run: |
INSTALLED_VERSION=$(python -c 'import niworkflows; print(niworkflows.__version__, end="")')
echo "INSTALLED: \"${INSTALLED_VERSION}\""
test "${INSTALLED_VERSION}" = "${VERSION}"
env:
VERSION: ${{ needs.job_metadata.outputs.version }}
- name: Install test dependencies
run: python -m pip install $PIP_FLAGS "niworkflows[tests]"
- name: Run tests
run: pytest -sv --doctest-modules --cov niworkflows --pyargs niworkflows
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
name: Submit to CodeCov
flake8:
if: github.event_name != 'schedule'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3
uses: actions/setup-python@v5
with:
python-version: 3
- run: pipx run flake8 niworkflows/