Skip to content

Commit 48e88b8

Browse files
committed
TEST: Use FMRIPREP-based Docker file
1 parent b950bfa commit 48e88b8

File tree

3 files changed

+157
-39
lines changed

3 files changed

+157
-39
lines changed

Dockerfile

Lines changed: 85 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,93 @@
1-
# Copyright (c) 2016, The developers of the Stanford CRN
2-
# All rights reserved.
3-
#
4-
# Redistribution and use in source and binary forms, with or without
5-
# modification, are permitted provided that the following conditions are met:
6-
#
7-
# * Redistributions of source code must retain the above copyright notice, this
8-
# list of conditions and the following disclaimer.
9-
#
10-
# * Redistributions in binary form must reproduce the above copyright notice,
11-
# this list of conditions and the following disclaimer in the documentation
12-
# and/or other materials provided with the distribution.
13-
#
14-
# * Neither the name of crn_base nor the names of its
15-
# contributors may be used to endorse or promote products derived from
16-
# this software without specific prior written permission.
17-
#
18-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21-
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22-
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23-
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24-
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25-
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26-
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28-
#
29-
# This Dockerfile is to be built for testing purposes inside CircleCI,
30-
# not for distribution within Docker hub.
31-
# For that purpose, the Dockerfile is found in build/Dockerfile.
1+
# Use Ubuntu 16.04 LTS
2+
FROM ubuntu:xenial-20161213
323

33-
FROM poldracklab/neuroimaging-core:freesurfer-0.0.2
4+
# Pre-cache neurodebian key
5+
COPY docker/files/neurodebian.gpg /root/.neurodebian.gpg
346

35-
# Install cwebp
7+
# Prepare environment
8+
RUN apt-get update && \
9+
apt-get install -y --no-install-recommends \
10+
curl \
11+
bzip2 \
12+
ca-certificates \
13+
xvfb \
14+
cython3 \
15+
build-essential \
16+
autoconf \
17+
libtool \
18+
pkg-config && \
19+
curl -sSL http://neuro.debian.net/lists/xenial.us-ca.full >> /etc/apt/sources.list.d/neurodebian.sources.list && \
20+
apt-key add /root/.neurodebian.gpg && \
21+
(apt-key adv --refresh-keys --keyserver hkp://ha.pool.sks-keyservers.net 0xA5D32F012649A5A9 || true) && \
22+
apt-get update
23+
24+
# Installing freesurfer
25+
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 \
26+
--exclude='freesurfer/trctrain' \
27+
--exclude='freesurfer/subjects/fsaverage_sym' \
28+
--exclude='freesurfer/subjects/fsaverage3' \
29+
--exclude='freesurfer/subjects/fsaverage4' \
30+
--exclude='freesurfer/subjects/cvs_avg35' \
31+
--exclude='freesurfer/subjects/cvs_avg35_inMNI152' \
32+
--exclude='freesurfer/subjects/bert' \
33+
--exclude='freesurfer/subjects/V1_average' \
34+
--exclude='freesurfer/average/mult-comp-cor' \
35+
--exclude='freesurfer/lib/cuda' \
36+
--exclude='freesurfer/lib/qt'
37+
38+
ENV FSL_DIR=/usr/share/fsl/5.0 \
39+
OS=Linux \
40+
FS_OVERRIDE=0 \
41+
FIX_VERTEX_AREA= \
42+
FSF_OUTPUT_FORMAT=nii.gz \
43+
FREESURFER_HOME=/opt/freesurfer
44+
ENV SUBJECTS_DIR=$FREESURFER_HOME/subjects \
45+
FUNCTIONALS_DIR=$FREESURFER_HOME/sessions \
46+
MNI_DIR=$FREESURFER_HOME/mni \
47+
LOCAL_DIR=$FREESURFER_HOME/local \
48+
FSFAST_HOME=$FREESURFER_HOME/fsfast \
49+
MINC_BIN_DIR=$FREESURFER_HOME/mni/bin \
50+
MINC_LIB_DIR=$FREESURFER_HOME/mni/lib \
51+
MNI_DATAPATH=$FREESURFER_HOME/mni/data \
52+
FMRI_ANALYSIS_DIR=$FREESURFER_HOME/fsfast
53+
ENV PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
54+
MNI_PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
55+
PATH=$FREESURFER_HOME/bin:$FSFAST_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH
56+
RUN echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IC9vcHQvZnJlZXN1cmZlci9saWNlbnNlLnR4dAo=" | base64 -d | sh
57+
58+
# Installing Neurodebian packages (FSL, AFNI, git)
59+
RUN apt-get update && \
60+
apt-get install -y --no-install-recommends \
61+
fsl-core=5.0.9-4~nd16.04+1 \
62+
fsl-mni152-templates=5.0.7-2 \
63+
afni=16.2.07~dfsg.1-5~nd16.04+1
64+
65+
ENV FSLDIR=/usr/share/fsl/5.0 \
66+
FSLOUTPUTTYPE=NIFTI_GZ \
67+
FSLMULTIFILEQUIT=TRUE \
68+
POSSUMDIR=/usr/share/fsl/5.0 \
69+
LD_LIBRARY_PATH=/usr/lib/fsl/5.0:$LD_LIBRARY_PATH \
70+
FSLTCLSH=/usr/bin/tclsh \
71+
FSLWISH=/usr/bin/wish \
72+
AFNI_MODELPATH=/usr/lib/afni/models \
73+
AFNI_IMSAVE_WARNINGS=NO \
74+
AFNI_TTATLAS_DATASET=/usr/share/afni/atlases \
75+
AFNI_PLUGINPATH=/usr/lib/afni/plugins
76+
ENV PATH=/usr/lib/fsl/5.0:/usr/lib/afni/bin:$PATH
77+
78+
# Installing ANTs 2.2.0 (NeuroDocker build)
79+
ENV ANTSPATH=/usr/lib/ants
80+
RUN mkdir -p $ANTSPATH && \
81+
curl -sSL "https://dl.dropbox.com/s/2f4sui1z6lcgyek/ANTs-Linux-centos5_x86_64-v2.2.0-0740f91.tar.gz" \
82+
| tar -xzC $ANTSPATH --strip-components 1
83+
ENV PATH=$ANTSPATH:$PATH
84+
85+
# Installing WEBP tools
3686
RUN curl -sSLO "http://downloads.webmproject.org/releases/webp/libwebp-0.5.2-linux-x86-64.tar.gz" && \
3787
tar -xf libwebp-0.5.2-linux-x86-64.tar.gz && cd libwebp-0.5.2-linux-x86-64/bin && \
3888
mv cwebp /usr/local/bin/ && rm -rf libwebp-0.5.2-linux-x86-64
3989

40-
# Install nodejs -> svgo
90+
# Installing SVGO
4191
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash -
4292
RUN apt-get install -y nodejs
4393
RUN npm install -g svgo
@@ -73,4 +123,4 @@ RUN cd niworkflows && \
73123
python -c 'from niworkflows.data.getters import get_mni_template_ras; get_mni_template_ras()' && \
74124
python -c 'from niworkflows.data.getters import get_ds003_downsampled; get_ds003_downsampled()' && \
75125
python -c 'from niworkflows.data.getters import get_ants_oasis_template_ras; get_ants_oasis_template_ras()' && \
76-
python -c 'from niworkflows.data.getters import get_mni_icbm152_nlin_asym_09c; get_mni_icbm152_nlin_asym_09c()'
126+
python -c 'from niworkflows.data.getters import get_mni_icbm152_nlin_asym_09c; get_mni_icbm152_nlin_asym_09c()'

circle.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@ dependencies:
1818
- git submodule init && (git submodule update || true)
1919
- git submodule sync && git -C nipype fetch origin && git submodule update
2020
override:
21-
- if [[ -e ~/docker/image.tar ]]; then docker load -i ~/docker/image.tar; fi :
22-
timeout: 6000
21+
- docker pull poldracklab/fmriprep:latest || true
2322
- docker build --rm=false -t niworkflows:py3 .
2423
- docker build --rm=false -t niworkflows:py2 --build-arg PYTHON_MAJOR=2 .
25-
- docker save poldracklab/neuroimaging-core:freesurfer-0.0.2 niworkflows:py3 niworkflows:py2 > ~/docker/image.tar :
26-
timeout: 6000
2724
test:
2825
override:
2926
- bash .circle/pytests.sh :

docker/files/neurodebian.gpg

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
Version: GnuPG v1
3+
4+
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
70+
=fAJZ
71+
-----END PGP PUBLIC KEY BLOCK-----

0 commit comments

Comments
 (0)