Skip to content

Commit a7bbab0

Browse files
authored
Merge pull request #337 from effigies/ci/fix
TEST: Squeeze image before passing to SimpleBeforeAfter
2 parents 66314c2 + 71c4f64 commit a7bbab0

File tree

10 files changed

+139
-119
lines changed

10 files changed

+139
-119
lines changed

.circleci/config.yml

Lines changed: 100 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,48 @@
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+
143
version: 2.1
244
orbs:
3-
docker: circleci/docker@1.6.0
45+
docker: circleci/docker@2.1.4
446

547
jobs:
648
cache_test_data:
@@ -89,8 +131,8 @@ jobs:
89131

90132
- restore_cache:
91133
keys:
92-
- freesurfer-v1-{{ .BuildNum }}
93-
- freesurfer-v1-
134+
- freesurfer-v0-{{ .BuildNum }}
135+
- freesurfer-v0-
94136
- run:
95137
name: Pull FreeSurfer down
96138
command: |
@@ -114,23 +156,19 @@ jobs:
114156
--exclude='freesurfer/subjects/sample-*.mgz' \
115157
--exclude='freesurfer/subjects/V1_average' \
116158
--exclude='freesurfer/trctrain'
117-
pushd /tmp/freesurfer
118-
echo "${FS_LICENSE_CONTENT}" | base64 -d | sh
159+
echo "b2VzdGViYW5Ac3RhbmZvcmQuZWR1CjMwNzU2CiAqQ1MzYkJ5VXMxdTVNCiBGU2kvUGJsejJxR1V3Cg==" | base64 -d > /tmp/freesurfer/license.txt
119160
else
120161
echo "FreeSurfer was cached."
121162
circleci step halt
122163
fi
123164
- save_cache:
124-
key: freesurfer-v1-{{ .BuildNum }}
165+
key: freesurfer-v0-{{ .BuildNum }}
125166
paths:
126167
- /tmp/freesurfer
127168

128169
build_n_pytest:
129-
machine:
130-
image: ubuntu-2004:202107-02
170+
<<: *machine_defaults
131171
working_directory: /tmp/tests
132-
environment:
133-
TZ: "/usr/share/zoneinfo/America/Los_Angeles"
134172
steps:
135173
- restore_cache:
136174
keys:
@@ -140,45 +178,53 @@ jobs:
140178
- build-v2-
141179
paths:
142180
- /tmp/docker
181+
- docker/install-docker-credential-helper
182+
- run: *docker_auth
183+
- run: *setup_docker_registry
143184
- run:
144-
name: Set-up a Docker registry
185+
name: Pull Ubuntu/jammy image
145186
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
148200
- run:
149-
name: Pull images
201+
name: Pull SDCFlows Docker image
150202
command: |
151203
set +e
152-
docker pull localhost:5000/ubuntu
204+
docker pull localhost:5000/sdcflows
153205
success=$?
154206
set -e
155207
if [[ "$success" = "0" ]]; then
156208
echo "Pulling from local registry"
157-
docker tag localhost:5000/ubuntu ubuntu:xenial-20201030
158-
docker pull localhost:5000/sdcflows
159209
docker tag localhost:5000/sdcflows nipreps/sdcflows:latest
160210
docker tag localhost:5000/sdcflows nipreps/sdcflows
161211
else
162212
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
166213
docker pull nipreps/sdcflows:latest
167214
fi
168215
- checkout:
169216
path: /tmp/src/sdcflows
170217
- run:
171218
name: Build Docker image
219+
working_directory: /tmp/src/sdcflows
172220
no_output_timeout: 60m
173221
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 }' )
177223
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
179225
180226
# Get version, update files.
181-
THISVERSION=$( python3 setup.py --version )
227+
THISVERSION=$( python3 -m setuptools_scm )
182228
if [[ ${THISVERSION:0:1} == "0" ]] ; then
183229
echo "WARNING: latest git tag could not be found"
184230
echo "Please, make sure you fetch all tags from upstream with"
@@ -194,6 +240,20 @@ jobs:
194240
--build-arg VERSION="${CIRCLE_TAG:-$THISVERSION}" . \
195241
| tee build-output.log
196242
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"
197257
- run:
198258
name: Docker push to local registry
199259
no_output_timeout: 40m
@@ -209,21 +269,11 @@ jobs:
209269
key: build-v2-{{ .Branch }}-{{ epoch }}
210270
paths:
211271
- /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}"
222272

223273
- restore_cache:
224274
keys:
225-
- freesurfer-v1-{{ .BuildNum }}
226-
- freesurfer-v1-
275+
- freesurfer-v0-{{ .BuildNum }}
276+
- freesurfer-v0-
227277
- restore_cache:
228278
keys:
229279
- data-v6-{{ .Branch }}-{{ .Revision }}
@@ -239,8 +289,8 @@ jobs:
239289
- workdir-v2-
240290
- run:
241291
name: Refreshing cached intermediate results
292+
working_directory: /tmp/src/sdcflows
242293
command: |
243-
cd /tmp/src/sdcflows
244294
COMMIT_MSG=$( git log --format=oneline -n 1 $CIRCLE_SHA1 )
245295
set +e
246296
do_refresh="$( echo "${COMMIT_MSG}" | grep -i -E '\[refresh[ _]?cache\]' )"
@@ -295,12 +345,11 @@ jobs:
295345

296346
- run:
297347
name: Submit unit test coverage
348+
working_directory: /tmp/src/sdcflows
298349
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 }' )
301351
pyenv local $PY3
302352
python3 -m pip install codecov
303-
cd /tmp/src/sdcflows
304353
python3 -m codecov --file /tmp/tests/unittests.xml \
305354
--flags unittests -e CIRCLE_JOB
306355
@@ -326,8 +375,7 @@ jobs:
326375
command: |
327376
python -m venv /tmp/venv
328377
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
331379
pip install --no-cache-dir -r docs/requirements.txt
332380
- run:
333381
name: Build only this commit
@@ -340,9 +388,7 @@ jobs:
340388
path: ~/docs/
341389

342390
deploy_docker:
343-
machine:
344-
image: ubuntu-2004:202107-02
345-
working_directory: /tmp/src/
391+
<<: *machine_defaults
346392
steps:
347393
- restore_cache:
348394
keys:
@@ -352,40 +398,30 @@ jobs:
352398
- build-v2-
353399
paths:
354400
- /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
365405
- run:
366406
name: Deploy to Docker Hub
367407
no_output_timeout: 40m
368408
command: |
369409
if [[ -n "$DOCKER_PAT" ]]; then
370-
docker login -u $DOCKER_USER -p $DOCKER_PAT
371410
docker push nipreps/sdcflows:latest
372411
docker tag nipreps/sdcflows nipreps/sdcflows:$CIRCLE_TAG
373412
docker push nipreps/sdcflows:$CIRCLE_TAG
374413
fi
375414
376415
test_package:
377-
docker:
378-
- image: cimg/python:3.8.5
379-
working_directory: /tmp/src/sdcflows
416+
<<: *python_defaults
380417
steps:
381418
- checkout
382419
- run:
383420
name: Prepare environment & build
384421
command: |
385422
python -m venv /tmp/buildenv
386423
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
389425
python -m build -s -w
390426
python -m twine check dist/*
391427
- store_artifacts:
@@ -399,24 +435,20 @@ jobs:
399435
command: |
400436
source /tmp/buildenv/bin/activate
401437
THISVERSION=$( python -m setuptools_scm )
402-
python -m pip install dist/*.tar.gz
438+
python -m pip install dist/*.whl
403439
mkdir empty
404440
cd empty
405441
INSTALLED=$( python -c 'import sdcflows; print(sdcflows.__version__)' )
406442
test "${CIRCLE_TAG:-$THISVERSION}" == "$INSTALLED"
407443
408444
deploy_pypi:
409-
docker:
410-
- image: cimg/python:3.8.5
411-
working_directory: /tmp/src/sdcflows
445+
<<: *python_defaults
412446
steps:
413447
- attach_workspace:
414448
at: /tmp/src/sdcflows
415449
- run:
416450
name: Upload to Pypi
417451
command: |
418-
python -m venv /tmp/upload
419-
source /tmp/upload/bin/activate
420452
python -m pip install twine
421453
python -m twine check dist/*
422454
python -m twine upload dist/* --non-interactive

.dockerignore

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,18 @@ build/**/*
88
build
99
dist/**/*
1010
dist
11-
docs/**/*
12-
docs
1311
sdcflows.egg-info/**/*
1412
sdcflows.egg-info
1513
.eggs/**/*
1614
.eggs
1715

18-
# housekeeping tools
19-
get_version.py
20-
update_changes.sh
21-
tox.ini
22-
2316
# pip installs
2417
src/**/*
2518
src/
2619

27-
# git
28-
.gitattributes
29-
.gitignore
30-
.github/**/*
31-
.github
32-
.git/**/*
33-
.git
34-
3520
# other
3621
work/**/*
3722
work
3823
out/**/*
3924
out/
40-
tools/**/*
41-
tools
4225
.DS_Store
43-
44-
# CI, etc.
45-
.circleci/**/*
46-
.circleci
47-
.codecov.yml
48-
.coveragerc
49-
.pep8speaks.yml
50-
.readthedocs.yml
51-
.travis.yml
52-
.zenodo.json
53-
CONTRIBUTING.md
54-

0 commit comments

Comments
 (0)