95
95
docker build --rm --cache-from=niworkflows:latest \
96
96
-t niworkflows:latest \
97
97
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
98
- --build-arg VCS_REF=`git rev-parse --short HEAD` . \
98
+ --build-arg VCS_REF=`git rev-parse --short HEAD` \
99
+ --build-arg VERSION=`python3 get_version.py` . \
99
100
&& e=0 && break || sleep 15
100
101
done && [ "$e" -eq "0" ]
101
102
docker tag niworkflows:latest localhost:5000/niworkflows
@@ -112,26 +113,45 @@ jobs:
112
113
- /tmp/images
113
114
114
115
get_data :
115
- machine :
116
- # Ubuntu 14.04 with Docker 17.10.0-ce
117
- image : ubuntu-1604:202007-01
118
- working_directory : /home/circleci/data
116
+ docker :
117
+ - image : continuumio/miniconda3:4.9.2-alpine
118
+ working_directory : /tmp/data
119
+ environment :
120
+ - TEMPLATEFLOW_HOME : /tmp/templateflow
119
121
steps :
120
122
- restore_cache :
121
123
keys :
122
- - data-v1-{{ epoch }}
123
- - data-v1-
124
+ - env-v1-{{ .Branch }}-
125
+ - env-v1-master-
126
+ - env-v1-
127
+ - run :
128
+ name : Setup git-annex, DataLad & TemplateFlow
129
+ command : |
130
+ conda install -y -c anaconda -c conda-forge git-annex datalad wget
131
+ python -m pip install --no-cache-dir -U datalad-osf
132
+ git config --global user.name 'NiPreps Bot'
133
+ git config --global user.email '[email protected] '
134
+ python -m pip install --no-cache-dir -U templateflow
135
+ - save_cache :
136
+ key : env-v1-{{ .Branch }}-{{ .BuildNum }}
137
+ paths :
138
+ - /opt/conda
139
+
140
+ - restore_cache :
141
+ keys :
142
+ - data-v3-{{ .Branch }}-{{ epoch }}
143
+ - data-v3-{{ .Branch }}-
144
+ - data-v3-master-
145
+ - data-v3-
124
146
- run :
125
147
name : Get test data from ds000003
126
148
command : |
127
- mkdir -p /tmp/data
128
- if [[ ! -d /tmp/data/ds003_downsampled ]]; then
129
- wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q \
130
- -O ds003_downsampled.tar.gz "https://files.osf.io/v1/resources/fvuh8/providers/osfstorage/57f328f6b83f6901ef94cf70"
131
- tar xvzf ds003_downsampled.tar.gz -C /tmp/data/
132
- else
133
- echo "Dataset ds000003 was cached"
149
+ if [[ ! -d ds000003 ]]; then
150
+ datalad install -r https://github.com/nipreps-data/ds000003.git
134
151
fi
152
+ datalad update -r --merge -d ds000003/
153
+ datalad get -J 2 -r -d ds000003/ ds000003/*
154
+
135
155
- run :
136
156
name : Get BIDS test data stub
137
157
command : |
@@ -143,57 +163,67 @@ jobs:
143
163
else
144
164
echo "BIDS stub was cached"
145
165
fi
166
+ - save_cache :
167
+ key : data-v3-{{ .Branch }}-{{ epoch }}
168
+ paths :
169
+ - /tmp/data/ds000003
170
+ - /tmp/data/BIDS-examples-1-enh-ds054
146
171
- run :
147
172
name : Store FreeSurfer license file
148
173
command : |
149
174
mkdir -p /tmp/fslicense
150
175
cd /tmp/fslicense
151
176
echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IGxpY2Vuc2UudHh0Cg==" | base64 -d | sh
177
+
178
+ - checkout :
179
+ path : /tmp/src/niworkflows
180
+
152
181
- persist_to_workspace :
153
182
root : /tmp
154
183
paths :
155
- - data
156
184
- fslicense
157
- - save_cache :
158
- key : data-v1-{{ epoch }}
159
- paths :
160
- - /tmp/data
185
+ - src/
186
+
187
+ - run :
188
+ name : Check if regression data must be downloaded
189
+ command : |
190
+ cd /tmp/src/niworkflows
191
+ set +e
192
+ test_masks="$( git log --format=oneline -n 1 $CIRCLE_SHA1 | grep -i -E '\[test[ _]?masks?\]' )$( echo $CIRCLE_BRANCH | grep -i -E '^masks?/' )"
193
+ set -e
194
+ if [[ "x${CIRCLE_TAG}" = "x" && "${CIRCLE_BRANCH}" != "master" && "x${test_masks}" = "x" ]]; then
195
+ echo "Not a tag or master branch, not a ``masks?/`` branch, no ``[test_masks]`` label in commit message"
196
+ echo "Skipping download of test data for mask regressions."
197
+ circleci step halt
198
+ fi
161
199
162
- get_regression_data :
163
- machine :
164
- # Ubuntu 14.04 with Docker 17.10.0-ce
165
- image : ubuntu-1604:202007-01
166
- working_directory : /home/circleci/data
167
- steps :
168
200
- restore_cache :
169
201
keys :
170
- - regression-v5-{{ .Revision }}
171
- - regression-v5-
202
+ - mask-regressions-v0-{{ .Branch }}-{{ .Revision }}-
203
+ - mask-regressions-v0-{{ .Branch }}-
204
+ - mask-regressions-v0-master-
205
+ - mask-regressions-v0-
206
+ - mask-regressions-
172
207
- run :
173
- name : Get truncated BOLD series
208
+ name : Setup TemplateFlow
174
209
command : |
175
- mkdir -p /tmp/data
176
- if [[ ! -d /tmp/data/fmriprep_bold_truncated ]]; then
177
- wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q \
178
- -O fmriprep_bold_truncated.tar.gz "https://osf.io/286yr/download"
179
- tar xvzf fmriprep_bold_truncated.tar.gz -C /tmp/data/
180
- else
181
- echo "Truncated BOLD series were cached"
182
- fi
210
+ python -c "from templateflow import api as tfapi; \
211
+ tfapi.get('MNI152NLin2009cAsym', resolution=1, label='brain', suffix='probseg'); \
212
+ tfapi.get('MNI152NLin2009cAsym', resolution=2, desc='fMRIPrep', suffix='boldref'); \
213
+ tfapi.get('MNI152NLin2009cAsym', resolution=2, desc='brain', suffix='mask'); "
183
214
- run :
184
- name : Get pre-computed masks
215
+ name : Install epi-references
185
216
command : |
186
- if [[ ! -d /tmp/data/fmriprep_bold_mask ]]; then
187
- wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q \
188
- -O fmriprep_bold_mask.tar.gz "https://osf.io/s4f7b/download"
189
- tar xvzf fmriprep_bold_mask.tar.gz -C /tmp/data/
190
- else
191
- echo "Pre-computed masks were cached"
217
+ if [[ ! -d epi-references ]]; then
218
+ datalad install -r https://github.com/nipreps-data/epi-references.git
192
219
fi
220
+ datalad update -r --merge -d epi-references/
221
+ datalad get -J 2 -r -d epi-references/ epi-references/*
193
222
- save_cache :
194
- key : regression-v5-{{ .Revision }}-{{ epoch }}
195
- paths :
196
- - /tmp/data
223
+ key : mask-regressions-v0-{{ .Branch }}-{{ .Revision }}-{{ epoch }}
224
+ paths :
225
+ - /tmp/templateflow
226
+ - /tmp/data/epi-references
197
227
198
228
test_pytest :
199
229
machine :
@@ -202,8 +232,6 @@ jobs:
202
232
steps :
203
233
- attach_workspace :
204
234
at : /tmp
205
- - checkout :
206
- path : /tmp/src/niworkflows
207
235
- run :
208
236
name : Get codecov
209
237
command : python -m pip install codecov
@@ -232,10 +260,18 @@ jobs:
232
260
docker run -d -p 5000:5000 --restart=always --name=registry \
233
261
-v /tmp/docker:/var/lib/registry registry:2
234
262
- run :
235
- name : Pull images to registry
263
+ name : Pull images from registry
236
264
command : |
237
265
docker pull localhost:5000/niworkflows
238
266
docker tag localhost:5000/niworkflows niworkflows:latest
267
+
268
+ - restore_cache :
269
+ keys :
270
+ - data-v3-{{ .Branch }}-{{ epoch }}
271
+ - data-v3-{{ .Branch }}-
272
+ - data-v3-master-
273
+ - data-v3-
274
+
239
275
- run :
240
276
name : Run unit tests
241
277
no_output_timeout : 2h
@@ -300,6 +336,25 @@ jobs:
300
336
steps :
301
337
- attach_workspace :
302
338
at : /tmp
339
+
340
+ - run :
341
+ name : Determine whether regression tests (masks) must be executed
342
+ command : |
343
+ cd /tmp/src/niworkflows
344
+ set +e
345
+ test_masks="$( git log --format=oneline -n 1 $CIRCLE_SHA1 | grep -i -E '\[test[ _]?masks?\]' )$( echo $CIRCLE_BRANCH | grep -i -E '^masks?/' )"
346
+ set -e
347
+ if [[ "x${CIRCLE_TAG}" = "x" && "${CIRCLE_BRANCH}" != "master" && "x${test_masks}" = "x" ]]; then
348
+ echo "Not a tag or master branch, not a ``masks?/`` branch, no ``[test_masks]`` label in commit message"
349
+ echo "Skipping download of test data for mask regressions."
350
+ circleci step halt
351
+ fi
352
+
353
+ - restore_cache :
354
+ keys :
355
+ - mask-regressions-v0-{{ .Branch }}-{{ .Revision }}-
356
+ - mask-regressions-v0-{{ .Branch }}-
357
+
303
358
- restore_cache :
304
359
keys :
305
360
- build-v1-{{ .Branch }}-{{ epoch }}
@@ -331,10 +386,6 @@ jobs:
331
386
command : |
332
387
docker pull localhost:5000/niworkflows
333
388
docker tag localhost:5000/niworkflows niworkflows:latest
334
-
335
- - restore_cache :
336
- keys :
337
- - regression-v5-{{ .Revision }}
338
389
- restore_cache :
339
390
keys :
340
391
- masks-workdir-v3-{{ .Branch }}-{{epoch}}
@@ -347,10 +398,11 @@ jobs:
347
398
command : |
348
399
mkdir -p /tmp/masks/{reports,workdir} && \
349
400
docker run -ti -u $(id -u) -w /src/niworkflows \
401
+ -v /tmp/templateflow:/templateflow \
402
+ -v /tmp/data/epi-references:/data -v /tmp/masks/reports:/tmp/masks/reports \
350
403
-e COVERAGE_FILE=/tmp/masks/reports/.coverage \
351
- -v /tmp/data:/tmp/data -v /tmp/masks/reports:/tmp/masks/reports \
352
- -e FMRIPREP_REGRESSION_SOURCE=/tmp/data/fmriprep_bold_truncated \
353
- -e FMRIPREP_REGRESSION_TARGETS=/tmp/data/fmriprep_bold_mask \
404
+ -e TEMPLATEFLOW_HOME=/templateflow -e TEMPLATEFLOW_AUTOUPDATE=off \
405
+ -e FMRIPREP_REGRESSION_SOURCE=/data \
354
406
-e FMRIPREP_REGRESSION_REPORTS=/tmp/masks/reports \
355
407
-e CACHED_WORK_DIRECTORY=/tmp/work -v /tmp/masks/workdir:/tmp/work \
356
408
niworkflows:latest \
@@ -385,8 +437,6 @@ jobs:
385
437
-e COVERAGE_FILE=/tmp/masks/reports/.coverage \
386
438
-v /tmp/masks/reports:/tmp/masks/reports \
387
439
niworkflows:latest coverage xml -o coverage.xml
388
- - checkout :
389
- path : /tmp/src/niworkflows
390
440
- run :
391
441
name : Get codecov
392
442
command : python -m pip install codecov
@@ -587,21 +637,9 @@ workflows:
587
637
only : /.*/
588
638
- get_data :
589
639
filters :
590
- branches :
591
- ignore :
592
- - /masks?\/.*/
593
640
tags :
594
641
only : /.*/
595
642
596
- - get_regression_data :
597
- filters :
598
- branches :
599
- only :
600
- - /master/
601
- - /masks?\/.*/
602
- tags :
603
- ignore : /.*/
604
-
605
643
- test_package :
606
644
filters :
607
645
branches :
@@ -625,12 +663,8 @@ workflows:
625
663
- test_masks :
626
664
requires :
627
665
- build
628
- - get_regression_data
666
+ - get_data
629
667
filters :
630
- branches :
631
- only :
632
- - /master/
633
- - /masks?\/.*/
634
668
tags :
635
669
ignore : /.*/
636
670
0 commit comments