1
+ # reusable anchors
2
+ _machine_defaults : &machine_defaults
3
+ environment :
4
+ TZ : " /usr/share/zoneinfo/America/Los_Angeles"
5
+ SCRATCH : " /scratch"
6
+ machine :
7
+ image : ubuntu-2204:current
8
+ docker_layer_caching : true
9
+ working_directory : /tmp/src/sdcflows
10
+ resource_class : large
11
+
12
+ _python_defaults : &python_defaults
13
+ docker :
14
+ - image : cimg/python:3.10.9
15
+ working_directory : /tmp/src/sdcflows
16
+
17
+ _docker_auth : &docker_auth
18
+ name : Docker authentication
19
+ command : |
20
+ if [[ -n $DOCKER_PAT ]]; then
21
+ echo "$DOCKER_PAT" | docker login -u $DOCKER_USER --password-stdin
22
+ fi
23
+
24
+ _setup_docker_registry : &setup_docker_registry
25
+ name : Set up Docker registry
26
+ command : |
27
+ if [[ -f /tmp/images/registry.tar.gz ]]; then
28
+ echo "Loading saved registry image"
29
+ docker load < /tmp/images/registry.tar.gz
30
+ else
31
+ echo "Pulling registry image from DockerHub"
32
+ docker pull registry:2
33
+ fi
34
+ docker run -d -p 5000:5000 --restart=always --name=registry \
35
+ -v /tmp/docker:/var/lib/registry registry:2
36
+
37
+ _pull_from_registry : &pull_from_registry
38
+ name : Pull and tag image from local registry
39
+ command : |
40
+ docker pull localhost:5000/sdcflows
41
+ docker tag localhost:5000/sdcflows nipreps/sdcflows:latest
42
+
1
43
version : 2.1
2
44
orbs :
3
- docker : circleci/docker@1.6.0
45
+ docker : circleci/docker@2.1.4
4
46
5
47
jobs :
6
48
cache_test_data :
89
131
90
132
- restore_cache :
91
133
keys :
92
- - freesurfer-v1 -{{ .BuildNum }}
93
- - freesurfer-v1 -
134
+ - freesurfer-v0 -{{ .BuildNum }}
135
+ - freesurfer-v0 -
94
136
- run :
95
137
name : Pull FreeSurfer down
96
138
command : |
@@ -114,23 +156,19 @@ jobs:
114
156
--exclude='freesurfer/subjects/sample-*.mgz' \
115
157
--exclude='freesurfer/subjects/V1_average' \
116
158
--exclude='freesurfer/trctrain'
117
- pushd /tmp/freesurfer
118
- echo "${FS_LICENSE_CONTENT}" | base64 -d | sh
159
+ echo "b2VzdGViYW5Ac3RhbmZvcmQuZWR1CjMwNzU2CiAqQ1MzYkJ5VXMxdTVNCiBGU2kvUGJsejJxR1V3Cg==" | base64 -d > /tmp/freesurfer/license.txt
119
160
else
120
161
echo "FreeSurfer was cached."
121
162
circleci step halt
122
163
fi
123
164
- save_cache :
124
- key : freesurfer-v1 -{{ .BuildNum }}
165
+ key : freesurfer-v0 -{{ .BuildNum }}
125
166
paths :
126
167
- /tmp/freesurfer
127
168
128
169
build_n_pytest :
129
- machine :
130
- image : ubuntu-2004:202107-02
170
+ << : *machine_defaults
131
171
working_directory : /tmp/tests
132
- environment :
133
- TZ : " /usr/share/zoneinfo/America/Los_Angeles"
134
172
steps :
135
173
- restore_cache :
136
174
keys :
@@ -140,45 +178,53 @@ jobs:
140
178
- build-v2-
141
179
paths :
142
180
- /tmp/docker
181
+ - docker/install-docker-credential-helper
182
+ - run : *docker_auth
183
+ - run : *setup_docker_registry
143
184
- run :
144
- name : Set-up a Docker registry
185
+ name : Pull Ubuntu/jammy image
145
186
command : |
146
- docker run -d -p 5000:5000 --restart=always --name=registry \
147
- -v /tmp/docker:/var/lib/registry registry:2
187
+ set +e
188
+ docker pull localhost:5000/ubuntu
189
+ success=$?
190
+ set -e
191
+ if [[ "$success" = "0" ]]; then
192
+ echo "Pulling from local registry"
193
+ docker tag localhost:5000/ubuntu ubuntu:jammy
194
+ else
195
+ echo "Pulling from Docker Hub"
196
+ docker pull ubuntu:jammy
197
+ docker tag ubuntu:jammy localhost:5000/ubuntu
198
+ docker push localhost:5000/ubuntu
199
+ fi
148
200
- run :
149
- name : Pull images
201
+ name : Pull SDCFlows Docker image
150
202
command : |
151
203
set +e
152
- docker pull localhost:5000/ubuntu
204
+ docker pull localhost:5000/sdcflows
153
205
success=$?
154
206
set -e
155
207
if [[ "$success" = "0" ]]; then
156
208
echo "Pulling from local registry"
157
- docker tag localhost:5000/ubuntu ubuntu:xenial-20201030
158
- docker pull localhost:5000/sdcflows
159
209
docker tag localhost:5000/sdcflows nipreps/sdcflows:latest
160
210
docker tag localhost:5000/sdcflows nipreps/sdcflows
161
211
else
162
212
echo "Pulling from Docker Hub"
163
- docker pull ubuntu:xenial-20201030
164
- docker tag ubuntu:xenial-20201030 localhost:5000/ubuntu
165
- docker push localhost:5000/ubuntu
166
213
docker pull nipreps/sdcflows:latest
167
214
fi
168
215
- checkout :
169
216
path : /tmp/src/sdcflows
170
217
- run :
171
218
name : Build Docker image
219
+ working_directory : /tmp/src/sdcflows
172
220
no_output_timeout : 60m
173
221
command : |
174
- cd /tmp/src/sdcflows
175
- export PY3=$(pyenv versions | grep '3\.' |
176
- sed -e 's/.* 3\./3./' -e 's/ .*//')
222
+ export PY3=$( pyenv versions | awk '/^\* 3/ { print $2 }' )
177
223
pyenv local $PY3
178
- python3 -m pip install " setuptools ~= 45.0" " setuptools_scm >= 6.2" " pip>=10.0.1"
224
+ python3 -m pip install --upgrade setuptools setuptools_scm pip
179
225
180
226
# Get version, update files.
181
- THISVERSION=$( python3 setup.py --version )
227
+ THISVERSION=$( python3 -m setuptools_scm )
182
228
if [[ ${THISVERSION:0:1} == "0" ]] ; then
183
229
echo "WARNING: latest git tag could not be found"
184
230
echo "Please, make sure you fetch all tags from upstream with"
@@ -194,6 +240,20 @@ jobs:
194
240
--build-arg VERSION="${CIRCLE_TAG:-$THISVERSION}" . \
195
241
| tee build-output.log
196
242
echo "${CIRCLE_TAG:-$THISVERSION}" >> /tmp/.local-version.txt
243
+ - run :
244
+ name : Check Docker image
245
+ working_directory : /tmp/src/sdcflows
246
+ command : |
247
+ export PY3=$( pyenv versions | awk '/^\* 3/ { print $2 }' )
248
+ pyenv local $PY3
249
+ # Get version, update files.
250
+ THISVERSION=$( python3 -m setuptools_scm )
251
+ BUILT_VERSION=$( docker run --rm --entrypoint=python nipreps/sdcflows:latest -c "import sdcflows; print(sdcflows.__version__)" )
252
+ BUILT_VERSION=${BUILT_VERSION%$'\r'}
253
+ echo "VERSION: \"$THISVERSION\""
254
+ echo "BUILT: \"$BUILT_VERSION\""
255
+ set -e
256
+ test "$BUILT_VERSION" = "$THISVERSION"
197
257
- run :
198
258
name : Docker push to local registry
199
259
no_output_timeout : 40m
@@ -209,21 +269,11 @@ jobs:
209
269
key : build-v2-{{ .Branch }}-{{ epoch }}
210
270
paths :
211
271
- /tmp/docker
212
- - run :
213
- name : Check version packaged in Docker image
214
- command : |
215
- docker run --rm -v /tmp:/tmp -v /tmp/src/sdcflows/.circleci/version.py:/usr/share/version.py \
216
- --entrypoint=python nipreps/sdcflows /usr/share/version.py
217
- THISVERSION=$( head -n1 /tmp/.local-version.txt )
218
- INSTALLED_VERSION=$( head -n1 /tmp/.docker-version.txt )
219
- echo "VERSION: \"${THISVERSION}\""
220
- echo "INSTALLED: \"${INSTALLED_VERSION}\""
221
- test "${INSTALLED_VERSION}" = "${THISVERSION}"
222
272
223
273
- restore_cache :
224
274
keys :
225
- - freesurfer-v1 -{{ .BuildNum }}
226
- - freesurfer-v1 -
275
+ - freesurfer-v0 -{{ .BuildNum }}
276
+ - freesurfer-v0 -
227
277
- restore_cache :
228
278
keys :
229
279
- data-v6-{{ .Branch }}-{{ .Revision }}
@@ -239,8 +289,8 @@ jobs:
239
289
- workdir-v2-
240
290
- run :
241
291
name : Refreshing cached intermediate results
292
+ working_directory : /tmp/src/sdcflows
242
293
command : |
243
- cd /tmp/src/sdcflows
244
294
COMMIT_MSG=$( git log --format=oneline -n 1 $CIRCLE_SHA1 )
245
295
set +e
246
296
do_refresh="$( echo "${COMMIT_MSG}" | grep -i -E '\[refresh[ _]?cache\]' )"
@@ -295,12 +345,11 @@ jobs:
295
345
296
346
- run :
297
347
name : Submit unit test coverage
348
+ working_directory : /tmp/src/sdcflows
298
349
command : |
299
- export PY3=$(pyenv versions | grep '3\.' |
300
- sed -e 's/.* 3\./3./' -e 's/ .*//')
350
+ export PY3=$( pyenv versions | awk '/^\* 3/ { print $2 }' )
301
351
pyenv local $PY3
302
352
python3 -m pip install codecov
303
- cd /tmp/src/sdcflows
304
353
python3 -m codecov --file /tmp/tests/unittests.xml \
305
354
--flags unittests -e CIRCLE_JOB
306
355
@@ -326,8 +375,7 @@ jobs:
326
375
command : |
327
376
python -m venv /tmp/venv
328
377
source /tmp/venv/bin/activate
329
- python -m pip install -U build "setuptools >= 45" wheel "setuptools_scm >= 6.2" \
330
- setuptools_scm_git_archive pip twine docutils
378
+ python -m pip install -U pip setuptools_scm
331
379
pip install --no-cache-dir -r docs/requirements.txt
332
380
- run :
333
381
name : Build only this commit
@@ -340,9 +388,7 @@ jobs:
340
388
path : ~/docs/
341
389
342
390
deploy_docker :
343
- machine :
344
- image : ubuntu-2004:202107-02
345
- working_directory : /tmp/src/
391
+ << : *machine_defaults
346
392
steps :
347
393
- restore_cache :
348
394
keys :
@@ -352,40 +398,30 @@ jobs:
352
398
- build-v2-
353
399
paths :
354
400
- /tmp/docker
355
- - run :
356
- name : Set-up a Docker registry
357
- command : |
358
- docker run -d -p 5000:5000 --restart=always --name=registry \
359
- -v /tmp/docker:/var/lib/registry registry:2
360
- - run :
361
- name : Pull images from local registry
362
- command : |
363
- docker pull localhost:5000/sdcflows
364
- docker tag localhost:5000/sdcflows nipreps/sdcflows:latest
401
+ - docker/install-docker-credential-helper
402
+ - run : *docker_auth
403
+ - run : *setup_docker_registry
404
+ - run : *pull_from_registry
365
405
- run :
366
406
name : Deploy to Docker Hub
367
407
no_output_timeout : 40m
368
408
command : |
369
409
if [[ -n "$DOCKER_PAT" ]]; then
370
- docker login -u $DOCKER_USER -p $DOCKER_PAT
371
410
docker push nipreps/sdcflows:latest
372
411
docker tag nipreps/sdcflows nipreps/sdcflows:$CIRCLE_TAG
373
412
docker push nipreps/sdcflows:$CIRCLE_TAG
374
413
fi
375
414
376
415
test_package :
377
- docker :
378
- - image : cimg/python:3.8.5
379
- working_directory : /tmp/src/sdcflows
416
+ << : *python_defaults
380
417
steps :
381
418
- checkout
382
419
- run :
383
420
name : Prepare environment & build
384
421
command : |
385
422
python -m venv /tmp/buildenv
386
423
source /tmp/buildenv/bin/activate
387
- python -m pip install -U build "setuptools >= 45" wheel "setuptools_scm >= 6.2" \
388
- setuptools_scm_git_archive pip twine docutils
424
+ python -m pip install -U build twine setuptools_scm
389
425
python -m build -s -w
390
426
python -m twine check dist/*
391
427
- store_artifacts :
@@ -399,24 +435,20 @@ jobs:
399
435
command : |
400
436
source /tmp/buildenv/bin/activate
401
437
THISVERSION=$( python -m setuptools_scm )
402
- python -m pip install dist/*.tar.gz
438
+ python -m pip install dist/*.whl
403
439
mkdir empty
404
440
cd empty
405
441
INSTALLED=$( python -c 'import sdcflows; print(sdcflows.__version__)' )
406
442
test "${CIRCLE_TAG:-$THISVERSION}" == "$INSTALLED"
407
443
408
444
deploy_pypi :
409
- docker :
410
- - image : cimg/python:3.8.5
411
- working_directory : /tmp/src/sdcflows
445
+ << : *python_defaults
412
446
steps :
413
447
- attach_workspace :
414
448
at : /tmp/src/sdcflows
415
449
- run :
416
450
name : Upload to Pypi
417
451
command : |
418
- python -m venv /tmp/upload
419
- source /tmp/upload/bin/activate
420
452
python -m pip install twine
421
453
python -m twine check dist/*
422
454
python -m twine upload dist/* --non-interactive
0 commit comments