5
5
environment :
6
6
TZ : " /usr/share/zoneinfo/America/Los_Angeles"
7
7
SCRATCH : " /scratch"
8
- docker :
9
- - image : docker:18.01.0-ce-git
8
+ machine :
9
+ image : circleci/classic:201711-01
10
10
working_directory : /tmp/src/fmriprep
11
11
steps :
12
12
- checkout
@@ -18,33 +18,46 @@ jobs:
18
18
circleci step halt
19
19
fi
20
20
21
- - run :
22
- name : Install parallel gzip and python3
23
- command : |
24
- apk add --no-cache pigz python3
25
21
- restore_cache :
26
22
keys :
27
- - docker-v3 -{{ .Branch }}-{{ .Revision }}
28
- - docker-v3 -{{ .Branch }}-
29
- - docker-v3 -master-
30
- - docker-v3 -
23
+ - build-v4 -{{ .Branch }}-{{ epoch }}
24
+ - build-v4 -{{ .Branch }}-
25
+ - build-v4 -master-
26
+ - build-v4 -
31
27
paths :
32
- - /tmp/cache/docker.tar.gz
33
- - setup_remote_docker
28
+ - /tmp/docker
29
+ - run :
30
+ name : Set up Docker registry
31
+ command : |
32
+ docker run -d -p 5000:5000 --restart=always --name=registry \
33
+ -v /tmp/docker:/var/lib/registry registry:2
34
34
- run :
35
- name : Load Docker image layer cache
36
- no_output_timeout : 30m
35
+ name : Pull images
37
36
command : |
38
- docker info
39
- set +o pipefail
40
- if [ -f /tmp/cache/docker.tar.gz ]; then
41
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
42
- docker images
37
+ set +e
38
+ docker pull localhost:5000/ubuntu
39
+ success=$?
40
+ set -e
41
+ if [[ "$success" = "0" ]]; then
42
+ echo "Pulling from local registry"
43
+ docker tag localhost:5000/ubuntu ubuntu:xenial-20191010
44
+ docker pull localhost:5000/fmriprep
45
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
46
+ docker tag localhost:5000/dmriprep poldracklab/fmriprep
47
+ else
48
+ echo "Pulling from Docker Hub"
49
+ docker pull ubuntu:xenial-20191010
50
+ docker tag ubuntu:xenial-20191010 localhost:5000/ubuntu
51
+ docker push localhost:5000/ubuntu
52
+ docker pull poldracklab/fmriprep:latest
43
53
fi
44
54
- run :
45
55
name : Build Docker image
46
56
no_output_timeout : 60m
47
57
command : |
58
+ export PY3=$(pyenv versions | grep '3\.' |
59
+ sed -e 's/.* 3\./3./' -e 's/ .*//')
60
+ pyenv local $PY3
48
61
# Get version, update files.
49
62
THISVERSION=$( python3 get_version.py )
50
63
if [[ ${THISVERSION:0:1} == "0" ]] ; then
@@ -58,52 +71,34 @@ jobs:
58
71
sed -i "s/title = {FMRIPrep}/title = {FMRIPrep ${CIRCLE_TAG:-$THISVERSION}}/" fmriprep/data/boilerplate.bib
59
72
# Build docker image
60
73
e=1 && for i in {1..5}; do
61
- docker build \
74
+ docker build --rm \
62
75
--cache-from=poldracklab/fmriprep \
63
- --rm=false \
64
76
-t poldracklab/fmriprep:latest \
65
77
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
66
78
--build-arg VCS_REF=`git rev-parse --short HEAD` \
67
79
--build-arg VERSION="${CIRCLE_TAG:-$THISVERSION}" . \
68
80
&& e=0 && break || sleep 15
69
81
done && [ "$e" -eq "0" ]
70
- # test if development image should be built
71
- if [[ "$( git log --format=oneline -n 1 $CIRCLE_SHA1 | grep -i -E '\[build[ _]?devel\]' )" != "" ]]; then
72
- echo "building development container"
73
- docker tag poldracklab/fmriprep poldracklab/fmriprep:unstable
74
- docker build \
75
- --rm=false \
76
- -t poldracklab/fmriprep_devel \
77
- -f Dockerfile_devel .
78
- fi
79
82
- run :
80
- name : Smoke test Docker image
83
+ name : Docker push to local registry
84
+ no_output_timeout : 40m
81
85
command : |
82
- THISVERSION=$( python3 get_version.py )
83
- THISVERSION=${THISVERSION%.dirty*}
84
- THISVERSION=${CIRCLE_TAG:-$THISVERSION}
85
- DOCKERVERSION=$(docker run --rm -it poldracklab/fmriprep:latest --version)
86
- DOCKERVERSION=${DOCKERVERSION%$'\r'}
87
- DOCKERVERSION=${DOCKERVERSION#*"fMRIPrep v"}
88
- echo "VERSION: \"$THISVERSION\""
89
- echo "DOCKERVERSION: \"${DOCKERVERSION}\""
90
- test "$DOCKERVERSION" = "$THISVERSION"
86
+ docker tag poldracklab/fmriprep:latest localhost:5000/fmriprep
87
+ docker push localhost:5000/fmriprep
91
88
- run :
92
- name : Docker save
93
- no_output_timeout : 40m
89
+ name : Docker registry garbage collection
94
90
command : |
95
- mkdir -p /tmp/cache
96
- docker save ubuntu:xenial-20161213 poldracklab/fmriprep:latest \
97
- | pigz -3 > /tmp/cache/docker.tar.gz
91
+ docker exec -it registry /bin/registry garbage-collect --delete-untagged \
92
+ /etc/docker/registry/config.yml
98
93
99
94
- persist_to_workspace :
100
95
root : /tmp
101
96
paths :
102
97
- src/fmriprep
103
98
- save_cache :
104
- key : docker-v3 -{{ .Branch }}-{{ .Revision }}-{{ epoch }}
99
+ key : build-v4 -{{ .Branch }}-{{ epoch }}
105
100
paths :
106
- - /tmp/cache/ docker.tar.gz
101
+ - /tmp/docker
107
102
108
103
get_data :
109
104
machine :
@@ -210,18 +205,24 @@ jobs:
210
205
at : /tmp
211
206
- restore_cache :
212
207
keys :
213
- - docker-v3-{{ .Branch }}-{{ .Revision }}
208
+ - build-v4-{{ .Branch }}-{{ epoch }}
209
+ - build-v4-{{ .Branch }}-
210
+ - build-v4-
211
+ paths :
212
+ - /tmp/docker
213
+ - restore_cache :
214
+ keys :
215
+ - data-v8-{{ .Revision }}
214
216
- run :
215
- name : Load Docker image layer cache
216
- no_output_timeout : 30m
217
+ name : Set-up a Docker registry
217
218
command : |
218
- docker info
219
- set +o pipefail
220
- if [ -f /tmp/cache/docker.tar.gz ]; then
221
- sudo apt update && sudo apt -y install pigz
222
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
223
- docker images
224
- fi
219
+ docker run -d -p 5000:5000 --restart=always --name=registry \
220
+ -v /tmp/docker:/var/lib/registry registry:2
221
+ - run :
222
+ name : Pull images from local registry
223
+ command : |
224
+ docker pull localhost:5000/fmriprep
225
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
225
226
- run :
226
227
name : Run fMRIPrep tests
227
228
no_output_timeout : 2h
@@ -323,7 +324,11 @@ jobs:
323
324
at : /tmp
324
325
- restore_cache :
325
326
keys :
326
- - docker-v3-{{ .Branch }}-{{ .Revision }}
327
+ - build-v4-{{ .Branch }}-{{ epoch }}
328
+ - build-v4-{{ .Branch }}-
329
+ - build-v4-
330
+ paths :
331
+ - /tmp/docker
327
332
- restore_cache :
328
333
keys :
329
334
- data-v7-{{ .Branch }}-{{ .Revision }}
@@ -333,23 +338,22 @@ jobs:
333
338
- ds005-anat-v17-{{ .Branch }}
334
339
- ds005-anat-v17-master
335
340
- ds005-anat-v17-
341
+ - run :
342
+ name : Set-up a Docker registry
343
+ command : |
344
+ docker run -d -p 5000:5000 --restart=always --name=registry \
345
+ -v /tmp/docker:/var/lib/registry registry:2
346
+ - run :
347
+ name : Pull images from local registry
348
+ command : |
349
+ docker pull localhost:5000/fmriprep
350
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
336
351
- run :
337
352
name : Setting up test
338
353
command : |
339
354
mkdir -p /tmp/ds005/derivatives && sudo setfacl -d -m group:$(id -gn):rwx /tmp/ds005/derivatives && sudo setfacl -m group:$(id -gn):rwx /tmp/ds005/derivatives
340
355
pip install --upgrade pip setuptools
341
356
pip install --upgrade /tmp/src/fmriprep/wrapper/
342
- - run :
343
- name : Load Docker image layer cache
344
- no_output_timeout : 30m
345
- command : |
346
- docker info
347
- set +o pipefail
348
- if [ -f /tmp/cache/docker.tar.gz ]; then
349
- sudo apt update && sudo apt -y install pigz
350
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
351
- docker images
352
- fi
353
357
- run :
354
358
name : Run anatomical workflow on ds005
355
359
no_output_timeout : 2h
@@ -479,7 +483,11 @@ jobs:
479
483
at : /tmp
480
484
- restore_cache :
481
485
keys :
482
- - docker-v3-{{ .Branch }}-{{ .Revision }}
486
+ - build-v4-{{ .Branch }}-{{ epoch }}
487
+ - build-v4-{{ .Branch }}-
488
+ - build-v4-
489
+ paths :
490
+ - /tmp/docker
483
491
- restore_cache :
484
492
keys :
485
493
- data-v7-{{ .Branch }}-{{ .Revision }}
@@ -495,17 +503,15 @@ jobs:
495
503
mkdir -p /tmp/ds054/derivatives && sudo setfacl -d -m group:$(id -gn):rwx /tmp/ds054/derivatives && sudo setfacl -m group:$(id -gn):rwx /tmp/ds054/derivatives
496
504
pip install --upgrade pip setuptools
497
505
pip install --upgrade /tmp/src/fmriprep/wrapper/
506
+ name: Set-up a Docker registry
507
+ command: |
508
+ docker run -d -p 5000:5000 --restart=always --name=registry \
509
+ -v /tmp/docker:/var/lib/registry registry:2
498
510
- run :
499
- name : Load Docker image layer cache
500
- no_output_timeout : 30m
511
+ name : Pull images from local registry
501
512
command : |
502
- docker info
503
- set +o pipefail
504
- if [ -f /tmp/cache/docker.tar.gz ]; then
505
- sudo apt update && sudo apt -y install pigz
506
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
507
- docker images
508
- fi
513
+ docker pull localhost:5000/fmriprep
514
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
509
515
- run :
510
516
name : Run anatomical workflow on ds054
511
517
no_output_timeout : 2h
@@ -617,7 +623,11 @@ jobs:
617
623
at : /tmp
618
624
- restore_cache :
619
625
keys :
620
- - docker-v3-{{ .Branch }}-{{ .Revision }}
626
+ - build-v4-{{ .Branch }}-{{ epoch }}
627
+ - build-v4-{{ .Branch }}-
628
+ - build-v4-
629
+ paths :
630
+ - /tmp/docker
621
631
- restore_cache :
622
632
keys :
623
633
- data-v7-{{ .Branch }}-{{ .Revision }}
@@ -634,16 +644,15 @@ jobs:
634
644
pip install --upgrade pip setuptools
635
645
pip install --upgrade /tmp/src/fmriprep/wrapper/
636
646
- run :
637
- name : Load Docker image layer cache
638
- no_output_timeout : 30m
647
+ name : Set-up a Docker registry
639
648
command : |
640
- docker info
641
- set +o pipefail
642
- if [ -f /tmp/cache/docker.tar.gz ]; then
643
- sudo apt update && sudo apt -y install pigz
644
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
645
- docker images
646
- fi
649
+ docker run -d -p 5000:5000 --restart=always --name=registry \
650
+ -v /tmp/docker:/var/lib/registry registry:2
651
+ - run :
652
+ name : Pull images from local registry
653
+ command : |
654
+ docker pull localhost:5000/fmriprep
655
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
647
656
- run :
648
657
name : Run anatomical workflow on ds000210
649
658
no_output_timeout : 2h
@@ -712,20 +721,40 @@ jobs:
712
721
working_directory : /tmp/src/fmriprep
713
722
steps :
714
723
724
+ - run :
725
+ name : Check whether image should be deployed to Docker Hub
726
+ command : |
727
+ if [[ "$CIRCLE_PROJECT_USERNAME" != "poldracklab" ]]; then
728
+ echo "Nothing to deploy for $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME."
729
+ circleci step halt
730
+ fi
731
+ - checkout :
732
+ path : /home/circleci/src/fmriprep
733
+ - run :
734
+ name : Check whether build should be skipped
735
+ command : |
736
+ cd /home/circleci/src/fmriprep
737
+ if [[ "$( git log --format='format:%s' -n 1 $CIRCLE_SHA1 | grep -i -E '^docs?(\(\w+\))?:' )" != "" ]]; then
738
+ echo "Only docs build"
739
+ circleci step halt
740
+ fi
715
741
- restore_cache :
716
742
keys :
717
- - docker-v3-{{ .Branch }}-{{ .Revision }}
743
+ - build-v4-{{ .Branch }}-{{ epoch }}
744
+ - build-v4-{{ .Branch }}-
745
+ - build-v4-
746
+ paths :
747
+ - /tmp/docker
718
748
- run :
719
- name : Load Docker image layer cache
720
- no_output_timeout : 30m
749
+ name : Setup a Docker registry
721
750
command : |
722
- docker info
723
- set +o pipefail
724
- if [ -f /tmp/cache/docker.tar.gz ]; then
725
- sudo apt update && sudo apt -y install pigz
726
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
727
- docker images
728
- fi
751
+ docker run -d -p 5000:5000 --restart=always --name=registry \
752
+ -v /tmp/docker:/var/lib/registry registry:2
753
+ - run :
754
+ name : Pull images from local registry
755
+ command : |
756
+ docker pull localhost:5000/fmriprep
757
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
729
758
- run :
730
759
name : Deploy to Docker Hub
731
760
no_output_timeout : 40m
@@ -753,18 +782,21 @@ jobs:
753
782
fi
754
783
- restore_cache :
755
784
keys :
756
- - docker-v3-{{ .Branch }}-{{ .Revision }}
785
+ - build-v4-{{ .Branch }}-{{ epoch }}
786
+ - build-v4-{{ .Branch }}-
787
+ - build-v4-
788
+ paths :
789
+ - /tmp/docker
757
790
- run :
758
- name : Load Docker image layer cache
759
- no_output_timeout : 30m
791
+ name : Set-up a Docker registry
760
792
command : |
761
- docker info
762
- set +o pipefail
763
- if [ -f /tmp/cache/docker.tar.gz ]; then
764
- sudo apt update && sudo apt -y install pigz
765
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
766
- docker images
767
- fi
793
+ docker run -d -p 5000:5000 --restart=always --name=registry \
794
+ -v /tmp/docker:/var/lib/registry registry:2
795
+ - run :
796
+ name : Pull images from local registry
797
+ command : |
798
+ docker pull localhost:5000/fmriprep
799
+ docker tag localhost:5000/fmriprep poldracklab/fmriprep:latest
768
800
- run :
769
801
name : Deploy to Docker Hub
770
802
no_output_timeout : 40m
0 commit comments