Skip to content

Commit abdddc3

Browse files
committed
Merge branch 'fix/CircleTests' of github.com:oesteban/nipype into fix/CircleTests
2 parents 01cc7f2 + 4c4be4c commit abdddc3

33 files changed

+257
-496
lines changed

.circle/codecov.sh

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ set -e # Exit immediately if a command exits with a non-zero status.
99
set -u # Treat unset variables as an error when substituting.
1010
set -x # Print command traces before executing command.
1111

12-
mkdir -p ${CIRCLE_TEST_REPORTS}/unittests ${CIRCLE_TEST_REPORTS}/smoketest
13-
cp ${SCRATCH}/coverage*.xml ${CIRCLE_TEST_REPORTS}/unittests/
14-
cp ${SCRATCH}/smoketests*.xml ${CIRCLE_TEST_REPORTS}/smoketest/
15-
1612
# Send coverage data to codecov.io
1713
curl -so codecov.io https://codecov.io/bash
1814
chmod 755 codecov.io
1915

20-
find "${CIRCLE_TEST_REPORTS}/unittests" -name '*.xml' -print0 | \
16+
find "${SCRATCH}/" -name 'coverage*.xml' -maxdepth 1 -print0 | \
2117
xargs -0 -I file ./codecov.io -f file -t "${CODECOV_TOKEN}" -F unittests
22-
find "${CIRCLE_TEST_REPORTS}/smoketest" -name '*.xml' -print0 | \
18+
find "${SCRATCH}/" -name 'smoketest*.xml' -maxdepth 1 -print0 | \
2319
xargs -0 -I file ./codecov.io -f file -t "${CODECOV_TOKEN}" -F smoketests
20+
21+
# Place test and coverage in the tests folder
22+
mkdir -p ${CIRCLE_TEST_REPORTS}/tests/
23+
cp ${SCRATCH}/pytest*.xml ${CIRCLE_TEST_REPORTS}/tests/ || true
24+
cp ${SCRATCH}/coverage*.xml ${CIRCLE_TEST_REPORTS}/tests/ || true
25+
cp ${SCRATCH}/smoketest*.xml ${CIRCLE_TEST_REPORTS}/tests/ || true

Dockerfile

Lines changed: 27 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -30,157 +30,37 @@
3030
#
3131
# Based on https://github.com/poldracklab/fmriprep/blob/9c92a3de9112f8ef1655b876de060a2ad336ffb0/Dockerfile
3232
#
33-
FROM ubuntu:xenial-20161213
33+
FROM nipype/base:latest
3434
MAINTAINER The nipype developers https://github.com/nipy/nipype
3535

36-
ARG DEBIAN_FRONTEND=noninteractive
37-
38-
# Pre-cache neurodebian key
39-
COPY docker/files/neurodebian.gpg /root/.neurodebian.gpg
40-
41-
# Prepare environment
42-
RUN apt-key add /root/.neurodebian.gpg && \
43-
apt-get update && \
44-
apt-get install -y --no-install-recommends curl bzip2 ca-certificates xvfb && \
45-
curl -sSL http://neuro.debian.net/lists/xenial.us-ca.full >> /etc/apt/sources.list.d/neurodebian.sources.list && \
46-
apt-key adv --refresh-keys --keyserver hkp://ha.pool.sks-keyservers.net 0xA5D32F012649A5A9 || true; \
47-
apt-get update
48-
49-
# Installing freesurfer
50-
RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/6.0.0/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.0.tar.gz | tar zxv -C /opt \
51-
--exclude='freesurfer/trctrain' \
52-
--exclude='freesurfer/subjects/fsaverage_sym' \
53-
--exclude='freesurfer/subjects/fsaverage3' \
54-
--exclude='freesurfer/subjects/fsaverage4' \
55-
--exclude='freesurfer/subjects/fsaverage5' \
56-
--exclude='freesurfer/subjects/fsaverage6' \
57-
--exclude='freesurfer/subjects/cvs_avg35' \
58-
--exclude='freesurfer/subjects/cvs_avg35_inMNI152' \
59-
--exclude='freesurfer/subjects/bert' \
60-
--exclude='freesurfer/subjects/V1_average' \
61-
--exclude='freesurfer/average/mult-comp-cor' \
62-
--exclude='freesurfer/lib/cuda' \
63-
--exclude='freesurfer/lib/qt'
64-
65-
ENV FSL_DIR=/usr/share/fsl/5.0 \
66-
OS=Linux \
67-
FS_OVERRIDE=0 \
68-
FIX_VERTEX_AREA= \
69-
FSF_OUTPUT_FORMAT=nii.gz \
70-
FREESURFER_HOME=/opt/freesurfer
71-
ENV SUBJECTS_DIR=$FREESURFER_HOME/subjects \
72-
FUNCTIONALS_DIR=$FREESURFER_HOME/sessions \
73-
MNI_DIR=$FREESURFER_HOME/mni \
74-
LOCAL_DIR=$FREESURFER_HOME/local \
75-
FSFAST_HOME=$FREESURFER_HOME/fsfast \
76-
MINC_BIN_DIR=$FREESURFER_HOME/mni/bin \
77-
MINC_LIB_DIR=$FREESURFER_HOME/mni/lib \
78-
MNI_DATAPATH=$FREESURFER_HOME/mni/data \
79-
FMRI_ANALYSIS_DIR=$FREESURFER_HOME/fsfast
80-
ENV PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
81-
MNI_PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
82-
PATH=$FREESURFER_HOME/bin:$FSFAST_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH
83-
RUN echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IC9vcHQvZnJlZXN1cmZlci9saWNlbnNlLnR4dAo=" | base64 -d | sh
84-
85-
# Installing Neurodebian packages (FSL, AFNI, git)
86-
RUN apt-get install -y --no-install-recommends \
87-
fsl-core=5.0.9-1~nd+1+nd16.04+1 \
88-
fsl-mni152-templates=5.0.7-2 \
89-
afni=16.2.07~dfsg.1-2~nd16.04+1
90-
91-
ENV FSLDIR=/usr/share/fsl/5.0 \
92-
FSLOUTPUTTYPE=NIFTI_GZ \
93-
FSLMULTIFILEQUIT=TRUE \
94-
POSSUMDIR=/usr/share/fsl/5.0 \
95-
LD_LIBRARY_PATH=/usr/lib/fsl/5.0:$LD_LIBRARY_PATH \
96-
FSLTCLSH=/usr/bin/tclsh \
97-
FSLWISH=/usr/bin/wish \
98-
AFNI_MODELPATH=/usr/lib/afni/models \
99-
AFNI_IMSAVE_WARNINGS=NO \
100-
AFNI_TTATLAS_DATASET=/usr/share/afni/atlases \
101-
AFNI_PLUGINPATH=/usr/lib/afni/plugins \
102-
PATH=/usr/lib/fsl/5.0:/usr/lib/afni/bin:$PATH
103-
104-
# Installing and setting up ANTs
105-
RUN mkdir -p /opt/ants && \
106-
curl -sSL "https://github.com/stnava/ANTs/releases/download/v2.1.0/Linux_Ubuntu14.04.tar.bz2" \
107-
| tar -xjC /opt/ants --strip-components 1
108-
109-
ENV ANTSPATH=/opt/ants \
110-
PATH=$ANTSPATH:$PATH
111-
112-
# Installing and setting up c3d
113-
RUN mkdir -p /opt/c3d && \
114-
curl -sSL "http://downloads.sourceforge.net/project/c3d/c3d/1.0.0/c3d-1.0.0-Linux-x86_64.tar.gz" \
115-
| tar -xzC /opt/c3d --strip-components 1
116-
117-
ENV C3DPATH=/opt/c3d/ \
118-
PATH=$C3DPATH/bin:$PATH
119-
120-
# Install some other required tools
121-
RUN apt-get install -y --no-install-recommends \
122-
git=1:2.7.4-0ubuntu1 \
123-
graphviz=2.38.0-12ubuntu2 \
124-
unzip \
125-
apt-utils \
126-
fusefat \
127-
make \
128-
ruby=1:2.3.0+1 && \
129-
apt-get clean && \
130-
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
131-
132-
# Install fake-S3
133-
ENV GEM_HOME /usr/lib/ruby/gems/2.3
134-
ENV BUNDLE_PATH="$GEM_HOME" \
135-
BUNDLE_BIN="$GEM_HOME/bin" \
136-
BUNDLE_SILENCE_ROOT_WARNING=1 \
137-
BUNDLE_APP_CONFIG="$GEM_HOME"
138-
ENV PATH $BUNDLE_BIN:$PATH
139-
RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" && \
140-
chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
141-
142-
RUN gem install fakes3
143-
144-
# Install Matlab MCR: from the good old install_spm_mcr.sh of @chrisfilo
145-
WORKDIR /opt
146-
RUN echo "destinationFolder=/opt/mcr" > mcr_options.txt && \
147-
echo "agreeToLicense=yes" >> mcr_options.txt && \
148-
echo "outputFile=/tmp/matlabinstall_log" >> mcr_options.txt && \
149-
echo "mode=silent" >> mcr_options.txt && \
150-
mkdir -p matlab_installer && \
151-
curl -sSL http://www.mathworks.com/supportfiles/downloads/R2015a/deployment_files/R2015a/installers/glnxa64/MCR_R2015a_glnxa64_installer.zip \
152-
-o matlab_installer/installer.zip && \
153-
unzip matlab_installer/installer.zip -d matlab_installer/ && \
154-
matlab_installer/install -inputFile mcr_options.txt && \
155-
rm -rf matlab_installer mcr_options.txt
156-
157-
# Install SPM
158-
RUN curl -sSL http://www.fil.ion.ucl.ac.uk/spm/download/restricted/utopia/dev/spm12_r6472_Linux_R2015a.zip -o spm12.zip && \
159-
unzip spm12.zip && \
160-
rm -rf spm12.zip
161-
162-
ENV MATLABCMD="/opt/mcr/v85/toolbox/matlab" \
163-
SPMMCRCMD="/opt/spm12/run_spm12.sh /opt/mcr/v85/ script" \
164-
FORCE_SPMMCR=1
165-
36+
ARG BUILD_DATE
37+
ARG VCS_REF
38+
ARG VERSION
39+
ARG PYTHON_VERSION_MAJOR=3
40+
ARG PYTHON_VERSION_MINOR=5
16641

16742
# Installing and setting up miniconda
168-
RUN curl -sSLO https://repo.continuum.io/miniconda/Miniconda3-4.2.12-Linux-x86_64.sh && \
169-
bash Miniconda3-4.2.12-Linux-x86_64.sh -b -p /usr/local/miniconda && \
170-
rm Miniconda3-4.2.12-Linux-x86_64.sh
43+
RUN curl -sSLO https://repo.continuum.io/miniconda/Miniconda${PYTHON_VERSION_MAJOR}-4.2.12-Linux-x86_64.sh && \
44+
bash Miniconda${PYTHON_VERSION_MAJOR}-4.2.12-Linux-x86_64.sh -b -p /usr/local/miniconda && \
45+
rm Miniconda${PYTHON_VERSION_MAJOR}-4.2.12-Linux-x86_64.sh
17146

17247
ENV PATH=/usr/local/miniconda/bin:$PATH \
17348
LANG=C.UTF-8 \
17449
LC_ALL=C.UTF-8 \
175-
ACCEPT_INTEL_PYTHON_EULA=yes
50+
ACCEPT_INTEL_PYTHON_EULA=yes \
51+
MKL_NUM_THREADS=1 \
52+
OMP_NUM_THREADS=1
53+
# MKL/OMP_NUM_THREADS: unless otherwise specified, each process should
54+
# only use one thread - nipype will handle parallelization
17655

17756
# Installing precomputed python packages
17857
RUN conda config --add channels conda-forge --add channels intel && \
17958
chmod +x /usr/local/miniconda/bin/* && \
18059
conda config --set always_yes yes --set changeps1 no && \
18160
conda update -q conda && \
18261
chmod +x /usr/local/miniconda/bin/*; sync && \
183-
conda install -y mkl=2017.0.1 \
62+
conda install -y python=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} \
63+
mkl=2017.0.1 \
18464
numpy=1.11.2 \
18565
scipy=0.18.1 \
18666
scikit-learn=0.17.1 \
@@ -194,14 +74,9 @@ RUN conda config --add channels conda-forge --add channels intel && \
19474
find /usr/local/miniconda/ -exec chmod 775 {} +
19575

19676
# matplotlib cleanups: set default backend, precaching fonts
197-
RUN sed -i 's/\(backend *: \).*$/\1Agg/g' /usr/local/miniconda/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc && \
77+
RUN sed -i 's/\(backend *: \).*$/\1Agg/g' /usr/local/miniconda/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages/matplotlib/mpl-data/matplotlibrc && \
19878
python -c "from matplotlib import font_manager"
19979

200-
# Unless otherwise specified each process should only use one thread - nipype
201-
# will handle parallelization
202-
ENV MKL_NUM_THREADS=1 \
203-
OMP_NUM_THREADS=1
204-
20580
# Installing dev requirements (packages that are not in pypi)
20681
WORKDIR /root/
20782
COPY requirements.txt requirements.txt
@@ -214,11 +89,18 @@ RUN cd /root/src/nipype && \
21489
pip install -e .[all] && \
21590
rm -rf ~/.cache/pip
21691

92+
# Install CI scripts
93+
COPY docker/files/run_* /usr/bin/
94+
RUN chmod +x /usr/bin/run_*
95+
96+
# Replace imglob with a Python3 compatible version
97+
COPY nipype/external/fsl_imglob.py /usr/bin/fsl_imglob.py
98+
RUN rm -rf ${FSLDIR}/bin/imglob && \
99+
chmod +x /usr/bin/fsl_imglob.py && \
100+
ln -s /usr/bin/fsl_imglob.py ${FSLDIR}/bin/imglob
101+
217102
WORKDIR /root/
218103

219-
ARG BUILD_DATE
220-
ARG VCS_REF
221-
ARG VERSION
222104
LABEL org.label-schema.build-date=$BUILD_DATE \
223105
org.label-schema.name="NIPYPE" \
224106
org.label-schema.description="NIPYPE - Neuroimaging in Python: Pipelines and Interfaces" \

README.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ Support and Communication
7878
-------------------------
7979

8080
If you have a problem or would like to ask a question about how to do something in Nipype please open an issue to
81-
`NeuroStars.org <http://neurostars.org>`_ with a *nipype* tag. `NeuroStars.org <http://neurostars.org>`_ is a
82-
platform similar to StackOverflow but dedicated to neuroinformatics.
81+
`NeuroStars.org <http://neurostars.org>`_ with a *nipype* tag. `NeuroStars.org <http://neurostars.org>`_ is a
82+
platform similar to StackOverflow but dedicated to neuroinformatics.
8383

8484
To participate in the Nipype development related discussions please use the following mailing list::
8585

circle.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ dependencies:
3333
- if [[ ! -d ~/examples/feeds ]]; then wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q -O fsl-5.0.9-feeds.tar.gz "${DATA_NIPYPE_FSL_FEEDS}" && tar xzf fsl-5.0.9-feeds.tar.gz -C ~/examples/; fi
3434
- docker images
3535
- sed -i -E "s/(__version__ = )'[A-Za-z0-9.-]+'/\1'$CIRCLE_TAG'/" nipype/info.py
36-
- e=1 && for i in {1..5}; do docker build --rm=false -t nipype/nipype:latest --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` --build-arg VERSION=$CIRCLE_TAG . && e=0 && break || sleep 15; done && [ "$e" -eq "0" ] :
36+
- e=1 && for i in {1..5}; do docker build -f docker/Dockerfile_base --rm=false -t nipype/base:latest --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` --build-arg VERSION=$CIRCLE_TAG . && e=0 && break || sleep 15; done && [ "$e" -eq "0" ] :
3737
timeout: 21600
38-
- e=1 && for i in {1..5}; do docker build --rm=false -f docker/Dockerfile_py27 -t nipype/nipype_test:py27 . && e=0 && break || sleep 15; done && [ "$e" -eq "0" ] :
39-
timeout: 1600
40-
- e=1 && for i in {1..5}; do docker build --rm=false -f docker/Dockerfile_py35 -t nipype/nipype_test:py35 . && e=0 && break || sleep 15; done && [ "$e" -eq "0" ] :
41-
timeout: 1600
42-
- docker save -o $HOME/docker/cache.tar nipype/nipype:latest nipype/nipype_test:py27 nipype/nipype_test:py35 :
38+
- e=1 && for i in {1..5}; do docker build --rm=false -t nipype/nipype:latest -t nipype/nipype:py35 --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` --build-arg VERSION=$CIRCLE_TAG . && e=0 && break || sleep 15; done && [ "$e" -eq "0" ] :
39+
timeout: 6000
40+
- e=1 && for i in {1..5}; do docker build --rm=false -t nipype/nipype:py27 --build-arg PYTHON_VERSION_MAJOR=2 --build-arg PYTHON_VERSION_MINOR=7 --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=`git rev-parse --short HEAD` --build-arg VERSION=$CIRCLE_TAG . && e=0 && break || sleep 15; done && [ "$e" -eq "0" ] :
41+
timeout: 6000
42+
- docker save -o $HOME/docker/cache.tar ubuntu:xenial-20161213 nipype/base:latest nipype/nipype:latest nipype/nipype_test:py27 nipype/nipype_test:py35 :
4343
timeout: 6000
4444

4545
test:
@@ -60,7 +60,7 @@ deployment:
6060
production:
6161
tag: /.*/
6262
commands:
63-
# Deploy to docker hub
63+
# Deploy to docker hub
6464
- if [[ -n "$DOCKER_PASS" ]]; then docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS && docker push nipype/nipype:latest; fi :
6565
timeout: 21600
6666
- if [[ -n "$DOCKER_PASS" ]]; then docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS && docker tag nipype/nipype nipype/nipype:$CIRCLE_TAG && docker push nipype/nipype:$CIRCLE_TAG; fi :

0 commit comments

Comments
 (0)