|
1 | 1 | version: 2
|
2 | 2 | jobs:
|
3 |
| - build: |
| 3 | + build_pytest: |
4 | 4 | machine:
|
5 | 5 | image: circleci/classic:201808-01
|
6 | 6 | working_directory: /tmp/src/nitransforms
|
7 | 7 | environment:
|
8 | 8 | TZ: "/usr/share/zoneinfo/America/Los_Angeles"
|
9 |
| - SCRATCH: "/scratch" |
10 |
| - |
11 |
| - steps: |
12 |
| - - restore_cache: |
13 |
| - keys: |
14 |
| - - build-v1-{{ .Branch }}-{{ epoch }} |
15 |
| - - build-v1-{{ .Branch }}- |
16 |
| - - build-v1-master- |
17 |
| - - build-v1- |
18 |
| - paths: |
19 |
| - - /tmp/docker |
20 |
| - - run: |
21 |
| - name: Set-up a Docker registry |
22 |
| - command: | |
23 |
| - docker run -d -p 5000:5000 --restart=always --name=registry \ |
24 |
| - -v /tmp/docker:/var/lib/registry registry:2 |
25 |
| - - run: |
26 |
| - name: Pull existing images |
27 |
| - command: | |
28 |
| - set +e |
29 |
| - docker pull localhost:5000/ubuntu |
30 |
| - success=$? |
31 |
| - set -e |
32 |
| - if [[ "$success" = "0" ]]; then |
33 |
| - echo "Pulling from local registry" |
34 |
| - docker tag localhost:5000/ubuntu ubuntu:xenial-20200114 |
35 |
| - docker pull localhost:5000/nitransforms |
36 |
| - docker tag localhost:5000/nitransforms nitransforms:latest |
37 |
| - else |
38 |
| - echo "Pulling from Docker Hub" |
39 |
| - docker pull ubuntu:xenial-20200114 |
40 |
| - docker tag ubuntu:xenial-20200114 localhost:5000/ubuntu |
41 |
| - docker push localhost:5000/ubuntu |
42 |
| - fi |
43 |
| - - checkout |
44 |
| - - run: |
45 |
| - name: Build Docker image & push to registry |
46 |
| - no_output_timeout: 60m |
47 |
| - command: | |
48 |
| - e=1 && for i in {1..5}; do |
49 |
| - docker build --rm --cache-from=nitransforms:latest \ |
50 |
| - -t nitransforms:latest \ |
51 |
| - --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ |
52 |
| - --build-arg VCS_REF=`git rev-parse --short HEAD` . \ |
53 |
| - && e=0 && break || sleep 15 |
54 |
| - done && [ "$e" -eq "0" ] |
55 |
| - docker tag nitransforms:latest localhost:5000/nitransforms |
56 |
| - docker push localhost:5000/nitransforms |
57 |
| - - run: |
58 |
| - name: Docker registry garbage collection |
59 |
| - command: | |
60 |
| - docker exec -it registry /bin/registry garbage-collect --delete-untagged \ |
61 |
| - /etc/docker/registry/config.yml |
62 |
| - - save_cache: |
63 |
| - key: build-v1-{{ .Branch }}-{{ epoch }} |
64 |
| - paths: |
65 |
| - - /tmp/docker |
66 |
| - - run: |
67 |
| - name: Store FreeSurfer license file |
68 |
| - command: | |
69 |
| - mkdir -p /tmp/fslicense |
70 |
| - cd /tmp/fslicense |
71 |
| - echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IGxpY2Vuc2UudHh0Cg==" | base64 -d | sh |
72 |
| - - persist_to_workspace: |
73 |
| - root: /tmp |
74 |
| - paths: |
75 |
| - - fslicense |
76 |
| - |
77 |
| - test_pytest: |
78 |
| - machine: |
79 |
| - image: circleci/classic:201808-01 |
80 |
| - environment: |
81 | 9 | FS_LICENSE: "/tmp/fslicense/license.txt"
|
82 |
| - working_directory: /tmp/tests |
| 10 | + |
83 | 11 | steps:
|
84 |
| - - attach_workspace: |
85 |
| - at: /tmp |
86 |
| - - checkout: |
87 |
| - path: /tmp/src/nitransforms |
88 |
| - - run: |
89 |
| - name: Get codecov |
90 |
| - command: python -m pip install codecov |
91 | 12 | - restore_cache:
|
92 | 13 | keys:
|
93 | 14 | - build-v1-{{ .Branch }}-{{ epoch }}
|
94 | 15 | - build-v1-{{ .Branch }}-
|
95 | 16 | - build-v1-master-
|
96 | 17 | - build-v1-
|
| 18 | + paths: |
| 19 | + - /tmp/docker |
| 20 | + - run: |
| 21 | + name: Set-up a Docker registry |
| 22 | + command: | |
| 23 | + docker run -d -p 5000:5000 --restart=always --name=registry \ |
| 24 | + -v /tmp/docker:/var/lib/registry registry:2 |
| 25 | + - run: |
| 26 | + name: Pull existing images |
| 27 | + command: | |
| 28 | + set +e |
| 29 | + docker pull localhost:5000/ubuntu |
| 30 | + success=$? |
| 31 | + set -e |
| 32 | + if [[ "$success" = "0" ]]; then |
| 33 | + echo "Pulling from local registry" |
| 34 | + docker tag localhost:5000/ubuntu ubuntu:xenial-20200114 |
| 35 | + docker pull localhost:5000/nitransforms |
| 36 | + docker tag localhost:5000/nitransforms nitransforms:latest |
| 37 | + else |
| 38 | + echo "Pulling from Docker Hub" |
| 39 | + docker pull ubuntu:xenial-20200114 |
| 40 | + docker tag ubuntu:xenial-20200114 localhost:5000/ubuntu |
| 41 | + docker push localhost:5000/ubuntu |
| 42 | + fi |
| 43 | + - checkout |
| 44 | + - run: |
| 45 | + name: Build Docker image & push to registry |
| 46 | + no_output_timeout: 60m |
| 47 | + command: | |
| 48 | + e=1 && for i in {1..5}; do |
| 49 | + docker build --rm --cache-from=nitransforms:latest \ |
| 50 | + -t nitransforms:latest \ |
| 51 | + --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ |
| 52 | + --build-arg VCS_REF=`git rev-parse --short HEAD` . \ |
| 53 | + && e=0 && break || sleep 15 |
| 54 | + done && [ "$e" -eq "0" ] |
| 55 | + docker tag nitransforms:latest localhost:5000/nitransforms |
| 56 | + docker push localhost:5000/nitransforms |
| 57 | + - run: |
| 58 | + name: Docker registry garbage collection |
| 59 | + command: | |
| 60 | + docker exec -it registry /bin/registry garbage-collect --delete-untagged \ |
| 61 | + /etc/docker/registry/config.yml |
| 62 | + - save_cache: |
| 63 | + key: build-v1-{{ .Branch }}-{{ epoch }} |
| 64 | + paths: |
| 65 | + - /tmp/docker |
97 | 66 | - run:
|
98 |
| - name: Set-up a Docker registry & pull |
| 67 | + name: Store FreeSurfer license file |
99 | 68 | command: |
|
100 |
| - docker run -d -p 5000:5000 --restart=always --name=registry \ |
101 |
| - -v /tmp/docker:/var/lib/registry registry:2 |
102 |
| - docker pull localhost:5000/nitransforms |
103 |
| - docker tag localhost:5000/nitransforms nitransforms:latest |
| 69 | + mkdir -p /tmp/fslicense |
| 70 | + cd /tmp/fslicense |
| 71 | + echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IGxpY2Vuc2UudHh0Cg==" | base64 -d | sh |
| 72 | +
|
| 73 | + - restore_cache: |
| 74 | + keys: |
| 75 | + - data-v1-{{ .Branch }}-{{ epoch }} |
| 76 | + - data-v1-{{ .Branch }}- |
| 77 | + - data-v1-master- |
| 78 | + - data-v1- |
| 79 | + paths: |
| 80 | + - /tmp/data |
| 81 | + - run: |
| 82 | + name: Download data |
| 83 | + command: | |
| 84 | + if [[ ! -d /tmp/data ]]; then |
| 85 | + wget --retry-connrefused --waitretry=5 --read-timeout=20 --timeout=15 -t 0 -q \ |
| 86 | + -O data.zip "https://files.osf.io/v1/resources/fvuh8/providers/osfstorage/5e7d5b65c3f8d300bafa05e0/?zip=" |
| 87 | + unzip -d /tmp/data data.zip |
| 88 | + else |
| 89 | + echo "Dataset was cached" |
| 90 | + fi |
| 91 | + - save_cache: |
| 92 | + key: data-v1-{{ .Branch }}-{{ epoch }} |
| 93 | + paths: |
| 94 | + - /tmp/data |
| 95 | + - run: |
| 96 | + name: Get codecov |
| 97 | + command: python -m pip install codecov |
104 | 98 | - run:
|
105 | 99 | name: Run unit tests
|
106 | 100 | no_output_timeout: 2h
|
107 | 101 | command: |
|
108 |
| - mkdir -p $PWD/artifacts $PWD/summaries |
109 |
| - sudo setfacl -d -m group:ubuntu:rwx $PWD |
110 |
| - sudo setfacl -m group:ubuntu:rwx $PWD |
111 |
| - docker run -u $( id -u ) -it --rm=false -w /src/nitransforms \ |
| 102 | + mkdir -p $PWD/{artifacts,summaries} |
| 103 | + docker run -u $( id -u ) -it --rm -w /src/nitransforms \ |
| 104 | + -v /tmp/data:/data -e TEST_DATA_HOME=/data \ |
112 | 105 | -e COVERAGE_FILE=/tmp/summaries/.pytest.coverage \
|
113 | 106 | -v /tmp/fslicense/license.txt:/opt/freesurfer/license.txt:ro \
|
114 | 107 | -v ${PWD}:/tmp nitransforms:latest \
|
@@ -162,33 +155,21 @@ jobs:
|
162 | 155 | command: |
|
163 | 156 | python3 -m twine upload dist/*
|
164 | 157 |
|
165 |
| -
|
166 | 158 | workflows:
|
167 | 159 | version: 2
|
168 | 160 | build_test_deploy:
|
169 | 161 | jobs:
|
170 |
| - - build: |
171 |
| - filters: |
172 |
| - branches: |
173 |
| - ignore: |
174 |
| - - /docs?\/.*/ |
175 |
| - tags: |
176 |
| - only: /.*/ |
177 |
| - |
178 |
| - - test_pytest: |
179 |
| - requires: |
180 |
| - - build |
| 162 | + - build_pytest: |
181 | 163 | filters:
|
182 | 164 | branches:
|
183 | 165 | ignore:
|
184 | 166 | - /docs?\/.*/
|
185 |
| - - /docker\/.*/ |
186 | 167 | tags:
|
187 | 168 | only: /.*/
|
188 | 169 |
|
189 | 170 | - test_packaging_and_deploy:
|
190 | 171 | requires:
|
191 |
| - - test_pytest |
| 172 | + - build_pytest |
192 | 173 | filters:
|
193 | 174 | branches:
|
194 | 175 | ignore: /.*/
|
|
0 commit comments