55 environment :
66 TZ : " /usr/share/zoneinfo/America/Los_Angeles"
77 SCRATCH : " /scratch"
8- docker :
9- - image : docker:18.01.0-ce-git
8+ machine :
9+ image : circleci/classic:201711-01
1010 working_directory : /tmp/src/fmriprep
1111 steps :
1212 - checkout
@@ -18,33 +18,46 @@ jobs:
1818 circleci step halt
1919 fi
2020
21- - run :
22- name : Install parallel gzip and python3
23- command : |
24- apk add --no-cache pigz python3
2521 - restore_cache :
2622 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 -
3127 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
3434 - run :
35- name : Load Docker image layer cache
36- no_output_timeout : 30m
35+ name : Pull images
3736 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
4353 fi
4454 - run :
4555 name : Build Docker image
4656 no_output_timeout : 60m
4757 command : |
58+ export PY3=$(pyenv versions | grep '3\.' |
59+ sed -e 's/.* 3\./3./' -e 's/ .*//')
60+ pyenv local $PY3
4861 # Get version, update files.
4962 THISVERSION=$( python3 get_version.py )
5063 if [[ ${THISVERSION:0:1} == "0" ]] ; then
@@ -58,52 +71,34 @@ jobs:
5871 sed -i "s/title = {FMRIPrep}/title = {FMRIPrep ${CIRCLE_TAG:-$THISVERSION}}/" fmriprep/data/boilerplate.bib
5972 # Build docker image
6073 e=1 && for i in {1..5}; do
61- docker build \
74+ docker build --rm \
6275 --cache-from=poldracklab/fmriprep \
63- --rm=false \
6476 -t poldracklab/fmriprep:latest \
6577 --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
6678 --build-arg VCS_REF=`git rev-parse --short HEAD` \
6779 --build-arg VERSION="${CIRCLE_TAG:-$THISVERSION}" . \
6880 && e=0 && break || sleep 15
6981 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
7982 - run :
80- name : Smoke test Docker image
83+ name : Docker push to local registry
84+ no_output_timeout : 40m
8185 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
9188 - run :
92- name : Docker save
93- no_output_timeout : 40m
89+ name : Docker registry garbage collection
9490 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
9893
9994 - persist_to_workspace :
10095 root : /tmp
10196 paths :
10297 - src/fmriprep
10398 - save_cache :
104- key : docker-v3 -{{ .Branch }}-{{ .Revision }}-{{ epoch }}
99+ key : build-v4 -{{ .Branch }}-{{ epoch }}
105100 paths :
106- - /tmp/cache/ docker.tar.gz
101+ - /tmp/docker
107102
108103 get_data :
109104 machine :
@@ -210,18 +205,24 @@ jobs:
210205 at : /tmp
211206 - restore_cache :
212207 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 }}
214216 - run :
215- name : Load Docker image layer cache
216- no_output_timeout : 30m
217+ name : Set-up a Docker registry
217218 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
225226 - run :
226227 name : Run fMRIPrep tests
227228 no_output_timeout : 2h
@@ -323,7 +324,11 @@ jobs:
323324 at : /tmp
324325 - restore_cache :
325326 keys :
326- - docker-v3-{{ .Branch }}-{{ .Revision }}
327+ - build-v4-{{ .Branch }}-{{ epoch }}
328+ - build-v4-{{ .Branch }}-
329+ - build-v4-
330+ paths :
331+ - /tmp/docker
327332 - restore_cache :
328333 keys :
329334 - data-v7-{{ .Branch }}-{{ .Revision }}
@@ -333,23 +338,22 @@ jobs:
333338 - ds005-anat-v17-{{ .Branch }}
334339 - ds005-anat-v17-master
335340 - 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
336351 - run :
337352 name : Setting up test
338353 command : |
339354 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
340355 pip install --upgrade pip setuptools
341356 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
353357 - run :
354358 name : Run anatomical workflow on ds005
355359 no_output_timeout : 2h
@@ -479,7 +483,11 @@ jobs:
479483 at : /tmp
480484 - restore_cache :
481485 keys :
482- - docker-v3-{{ .Branch }}-{{ .Revision }}
486+ - build-v4-{{ .Branch }}-{{ epoch }}
487+ - build-v4-{{ .Branch }}-
488+ - build-v4-
489+ paths :
490+ - /tmp/docker
483491 - restore_cache :
484492 keys :
485493 - data-v7-{{ .Branch }}-{{ .Revision }}
@@ -495,17 +503,15 @@ jobs:
495503 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
496504 pip install --upgrade pip setuptools
497505 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
498510 - run :
499- name : Load Docker image layer cache
500- no_output_timeout : 30m
511+ name : Pull images from local registry
501512 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
509515 - run :
510516 name : Run anatomical workflow on ds054
511517 no_output_timeout : 2h
@@ -617,7 +623,11 @@ jobs:
617623 at : /tmp
618624 - restore_cache :
619625 keys :
620- - docker-v3-{{ .Branch }}-{{ .Revision }}
626+ - build-v4-{{ .Branch }}-{{ epoch }}
627+ - build-v4-{{ .Branch }}-
628+ - build-v4-
629+ paths :
630+ - /tmp/docker
621631 - restore_cache :
622632 keys :
623633 - data-v7-{{ .Branch }}-{{ .Revision }}
@@ -634,16 +644,15 @@ jobs:
634644 pip install --upgrade pip setuptools
635645 pip install --upgrade /tmp/src/fmriprep/wrapper/
636646 - run :
637- name : Load Docker image layer cache
638- no_output_timeout : 30m
647+ name : Set-up a Docker registry
639648 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
647656 - run :
648657 name : Run anatomical workflow on ds000210
649658 no_output_timeout : 2h
@@ -712,20 +721,40 @@ jobs:
712721 working_directory : /tmp/src/fmriprep
713722 steps :
714723
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
715741 - restore_cache :
716742 keys :
717- - docker-v3-{{ .Branch }}-{{ .Revision }}
743+ - build-v4-{{ .Branch }}-{{ epoch }}
744+ - build-v4-{{ .Branch }}-
745+ - build-v4-
746+ paths :
747+ - /tmp/docker
718748 - run :
719- name : Load Docker image layer cache
720- no_output_timeout : 30m
749+ name : Setup a Docker registry
721750 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
729758 - run :
730759 name : Deploy to Docker Hub
731760 no_output_timeout : 40m
@@ -753,18 +782,21 @@ jobs:
753782 fi
754783 - restore_cache :
755784 keys :
756- - docker-v3-{{ .Branch }}-{{ .Revision }}
785+ - build-v4-{{ .Branch }}-{{ epoch }}
786+ - build-v4-{{ .Branch }}-
787+ - build-v4-
788+ paths :
789+ - /tmp/docker
757790 - run :
758- name : Load Docker image layer cache
759- no_output_timeout : 30m
791+ name : Set-up a Docker registry
760792 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
768800 - run :
769801 name : Deploy to Docker Hub
770802 no_output_timeout : 40m
0 commit comments