diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index eefecf4..bb62f38 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -25,10 +25,12 @@ permissions: contents: read pages: write id-token: write -env: # Define environment variables - # Force tox and pytest to use color +env: # Define environment variables + SCIGET_NAME: fsl + SCIGET_VERSION: 6.0.7.18 FORCE_COLOR: true + jobs: build: @@ -62,46 +64,31 @@ jobs: - name: Checkout repo uses: actions/checkout@v4 - - name: Install Minconda - uses: conda-incubator/setup-miniconda@v3 - with: - auto-activate-base: true - activate-environment: "" - - - name: Install fsl Packages - run: >- - conda install -c conda-forge -c https://fsl.fmrib.ox.ac.uk/fsldownloads/fslconda/public/ - ciftilib cli11 elc fsl-add_module fsl-armawrap fsl-asl_mfree fsl-avwutils fsl-base - fsl-basil fsl-basisfield fsl-baycest fsl-bet2 fsl-bianca fsl-biancadata fsl-bint - fsl-cluster fsl-copain fsl-cprob fsl-cudimot fsl-data_atlases - fsl-data_atlases_xtract fsl-data_first_models_317_bin fsl-data_first_models_336_bin fsl-data_linearmni - fsl-data_omm fsl-data_possum fsl-data_standard fsl-deface fsl-discreteopt fsl-dpm fsl-dwssfp - fsl-easyfeat fsl-eddy fsl-eddy_qc fsl-fabber_core fsl-fabber_models_asl fsl-fabber_models_cest - fsl-fabber_models_dce fsl-fabber_models_dsc fsl-fabber_models_dualecho fsl-fabber_models_dwi - fsl-fabber_models_pet fsl-fabber_models_qbold fsl-fabber_models_t1 fsl-fast4 fsl-fastpdlib - fsl-fdt fsl-feat5 fsl-film fsl-filmbabe fsl-first fsl-first_lib fsl-flameo - fsl-flirt fsl-fnirt fsl-fugue fsl-get_standard fsl-giftiio fsl-gps - fsl-gui-desktop fsl-installer fsl-lesions fsl-libgdc fsl-libmeshutils fsl-libvis fsl-load_dicom fsl-mcflirt - fsl-melodic fsl-meshclass fsl-misc_c fsl-misc_scripts fsl-misc_tcl fsl-miscmaths fsl-miscvis - fsl-mist fsl-mm fsl-msm fsl-msmreglib fsl-mvdisc fsl-nets fsl-newimage - fsl-newmesh fsl-newnifti fsl-newran fsl-oxford_asl fsl-possum fsl-ptx2 fsl-pyfeeds - fsl-pyfeeds-tests fsl-qboot fsl-randomise fsl-relax fsl-shapemodel fsl-siena fsl-slicetimer - fsl-sub fsl-sub-plugin-sge fsl-sub-plugin-slurm fsl-surface fsl-susan fsl-swe fsl-tbss - fsl-topup fsl-utils fsl-vbm fsl-verbena fsl-vtkio fsl-warpfns fsl-wire fsl-xtract fsl-xtract_data - fsl-znzlib fsl_mrs fsl_sub fsl_sub_plugin_sge fsl_sub_plugin_slurm - - - name: Download tasks converted from Nipype - uses: actions/download-artifact@v4 - with: - name: converted-nipype - path: pydra/tasks/fsl/auto + - name: Revert version to most recent version tag on Nipype or Nipype2Pydra update + if: github.event_name == 'repository_dispatch' + run: git checkout $(git tag -l | grep 'v.*' | tail -n 1 | awk -F post '{print $1}') - - name: Show the contents of the auto-generated tasks - run: tree pydra + - name: Install Apptainer and Lmod + run: | + sudo add-apt-repository -y ppa:apptainer/ppa + sudo apt-get update + sudo apt-get install -y lmod apptainer - - name: Strip auto package from gitignore so it is included in package + - name: Install Neurocommand run: | - sed -i '/\/pydra\/tasks\/fsl\/auto/d' .gitignore + git clone https://github.com/NeuroDesk/neurocommand.git + pushd neurocommand + pip3 install -r neurodesk/requirements.txt --user + bash build.sh --cli + echo "APPTAINER_BINDPATH=`pwd -P`" >> $GITHUB_ENV + + source /etc/profile.d/lmod.sh + ./containers.sh "${{ env.SCIGET_NAME }}" | grep -E "^\s*\|\s*${{ env.SCIGET_NAME }}\s*\|\s*${{ env.SCIGET_VERSION }}\s*\|" | awk -F '|' '{gsub(/ /,"",$4); print $4}' + SCIGET_BUILDVERSION=$(./containers.sh "${{ env.SCIGET_NAME }}" | grep -E "^\s*\|\s*${{ env.SCIGET_NAME }}\s*\|\s*${{ env.SCIGET_VERSION }}\s*\|" | awk -F '|' '{gsub(/ /,"",$4); print $4}') + + ./local/fetch_containers.sh ${{ env.SCIGET_NAME }} ${{ env.SCIGET_VERSION }} $SCIGET_BUILDVERSION + echo "SCIGET_BUILDVERSION=$SCIGET_BUILDVERSION" >> $GITHUB_ENV + popd - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 @@ -161,7 +148,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.x' - name: Install build tools run: python -m pip install build twine @@ -174,7 +161,7 @@ jobs: - name: Check for PyPI token on tag id: deployable - if: github.event_name == 'release' || github.event_name == 'repository_dispatch' + if: github.event_name == 'release' env: PYPI_API_TOKEN: "${{ secrets.PYPI_FILEFORMATS_API_TOKEN }}" run: if [ -n "$PYPI_API_TOKEN" ]; then echo "DEPLOY=true" >> $GITHUB_OUTPUT; fi @@ -200,7 +187,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.x' - name: Install build tools run: python -m pip install build twine @@ -213,7 +200,7 @@ jobs: - name: Check for PyPI token on tag id: deployable - if: github.event_name == 'release' || github.event_name == 'repository_dispatch' + if: github.event_name == 'release' env: PYPI_API_TOKEN: "${{ secrets.PYPI_FILEFORMATS_EXTRAS_API_TOKEN }}" run: if [ -n "$PYPI_API_TOKEN" ]; then echo "DEPLOY=true" >> $GITHUB_OUTPUT; fi @@ -227,9 +214,8 @@ jobs: packages-dir: ./related-packages/fileformats-extras/dist deploy: - needs: [build, test] + needs: [build, test, deploy-fileformats, deploy-fileformats-extras] runs-on: ubuntu-latest - if: github.event_name == 'release' permissions: attestations: write id-token: write @@ -240,8 +226,10 @@ jobs: name: Packages path: dist - name: Upload to PyPI + if: github.event_name == 'release' uses: pypa/gh-action-pypi-publish@release/v1 + # Deploy on tags if PYPI_API_TOKEN is defined in the repository secrets. # Secrets are not accessible in the if: condition [0], so set an output variable [1] # [0] https://github.community/t/16928 diff --git a/tox.ini b/tox.ini index 4510402..4f60dc6 100644 --- a/tox.ini +++ b/tox.ini @@ -47,6 +47,9 @@ setenv = pre: UV_INDEX_STRATEGY=unsafe-best-match uv_resolution = min: lowest-direct +deps = + -e ./related-packages/fileformats + -e ./related-packages/fileformats-extras commands = pytest pydra/tasks/fsl --cov=pydra.tasks.fsl --cov-report term-missing --durations=20 --durations-min=1.0 {posargs:-n auto}