Skip to content

Commit e36a470

Browse files
authored
Merge pull request #79 from bids-apps/deploy
[MAINT] deploy on all push to main
2 parents 62eb276 + ee52430 commit e36a470

File tree

3 files changed

+127
-131
lines changed

3 files changed

+127
-131
lines changed

.circleci/config.yml

Lines changed: 93 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,15 @@ jobs:
6666
parameters:
6767
version:
6868
type: string
69+
test:
70+
type: string
6971
steps:
7072
- checkout
7173
- attach_workspace:
7274
at: /tmp/workspace
7375

7476
- run:
77+
name: load image
7578
command: |
7679
docker load -i /tmp/workspace/docker/image_fs<< parameters.version >>.tar
7780
@@ -93,84 +96,70 @@ jobs:
9396
--tmpfs /tmp --tmpfs /var/tmp \
9497
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> -h
9598
96-
- run: mkdir -p ${HOME}/outputs1 ${HOME}/outputs2
99+
- run: mkdir -p ${HOME}/outputs<< parameters.test >>
97100

98101
- run:
99-
name: test 1
100-
command: |
101-
docker run -ti --rm --read-only \
102-
-v /tmp/workspace/license_fs<< parameters.version >>/license.txt:/license.txt \
103-
-v /tmp/workspace/data/ds114_test1:/bids_dataset \
104-
-v ${HOME}/outputs1:/outputs \
105-
--tmpfs /tmp --tmpfs /var/tmp \
106-
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> \
107-
/bids_dataset \
108-
/outputs \
109-
participant \
110-
--participant_label 01 \
111-
--license_file=/license.txt \
112-
--stages autorecon1
102+
name: test << parameters.test >>
103+
command: |2
113104
114-
cat ${HOME}/outputs1/sub-01/scripts/recon-all.done
105+
if [[ << parameters.test >> -eq 1 ]]; then
106+
docker run -ti --rm --read-only \
107+
-v /tmp/workspace/license_fs<< parameters.version >>/license.txt:/license.txt \
108+
-v /tmp/workspace/data/ds114_test<< parameters.test >>:/bids_dataset \
109+
-v ${HOME}/outputs<< parameters.test >>:/outputs \
110+
--tmpfs /tmp --tmpfs /var/tmp \
111+
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> \
112+
/bids_dataset \
113+
/outputs \
114+
participant \
115+
--participant_label 01 \
116+
--license_file=/license.txt \
117+
--stages autorecon1
115118
116-
- run:
117-
name: test 2
118-
command: |
119-
docker run -ti --rm --read-only \
120-
-v /tmp/workspace/license_fs<< parameters.version >>/license.txt:/license.txt \
121-
-v /tmp/workspace/data/ds114_test2:/bids_dataset \
122-
-v ${HOME}/outputs2:/outputs \
123-
--tmpfs /tmp --tmpfs /var/tmp \
124-
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> \
125-
/bids_dataset \
126-
/outputs \
127-
participant \
128-
--participant_label 01 \
129-
--steps cross-sectional \
130-
--session_label test \
131-
--license_file=/license.txt \
132-
--stages autorecon1
119+
cat ${HOME}/outputs<< parameters.test >>/sub-01/scripts/recon-all.done
133120
134-
cat ${HOME}/outputs2/sub-01_ses-test/scripts/recon-all.done
121+
fi
122+
123+
if [[ << parameters.test >> -eq 2 ]]; then
124+
docker run -ti --rm --read-only \
125+
-v /tmp/workspace/license_fs<< parameters.version >>/license.txt:/license.txt \
126+
-v /tmp/workspace/data/ds114_test<< parameters.test >>:/bids_dataset \
127+
-v ${HOME}/outputs<< parameters.test >>:/outputs \
128+
--tmpfs /tmp --tmpfs /var/tmp \
129+
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> \
130+
/bids_dataset \
131+
/outputs \
132+
participant \
133+
--participant_label 01 \
134+
--license_file=/license.txt \
135+
--stages autorecon1 \
136+
--steps cross-sectional \
137+
--session_label test
138+
139+
cat ${HOME}/outputs<< parameters.test >>/sub-01_ses-test/scripts/recon-all.done
140+
fi
135141
136142
- run:
137-
name: group2 test 1
143+
name: group2 test << parameters.test >>
138144
command: |
139145
docker run -ti --rm --read-only \
140146
-v /tmp/workspace/license_fs<< parameters.version >>/license.txt:/license.txt \
141-
-v /tmp/workspace/data/ds114_test1:/bids_dataset \
142-
-v /tmp/workspace/data/ds114_test1_freesurfer_precomp_v6.0.0:/outputs \
147+
-v /tmp/workspace/data/ds114_test<< parameters.test >>:/bids_dataset \
148+
-v /tmp/workspace/data/ds114_test<< parameters.test >>_freesurfer_precomp_v6.0.0:/outputs \
143149
--tmpfs /tmp --tmpfs /var/tmp \
144150
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> \
145151
/bids_dataset \
146152
/outputs \
147153
group2 \
148154
--license_file=/license.txt
149155
150-
sudo mv /tmp/workspace/data/ds114_test1_freesurfer_precomp_v6.0.0/00_group* ${HOME}/outputs1/
151-
cat ${HOME}/outputs1/00_group2_stats_tables/lh.aparc.thickness.tsv
152-
cat ${HOME}/outputs1/00_group2_stats_tables/euler.tsv
153-
154-
- run:
155-
name: group2 test 2
156-
command: |
157-
docker run -ti --rm --read-only \
158-
-v /tmp/workspace/license_fs<< parameters.version >>/license.txt:/license.txt \
159-
-v /tmp/workspace/data/ds114_test2:/bids_dataset \
160-
-v /tmp/workspace/data/ds114_test2_freesurfer_precomp_v6.0.0:/outputs \
161-
--tmpfs /tmp --tmpfs /var/tmp \
162-
bids/${CIRCLE_PROJECT_REPONAME}_fs<< parameters.version >> \
163-
/bids_dataset /outputs group2 \
164-
--license_file=/license.txt
165-
166-
sudo mv /tmp/workspace/data/ds114_test2_freesurfer_precomp_v6.0.0/00_group* ${HOME}/outputs2/
167-
cat ${HOME}/outputs2/00_group2_stats_tables/lh.aparc.thickness.tsv
168-
cat ${HOME}/outputs2/00_group2_stats_tables/euler.tsv
156+
sudo mv /tmp/workspace/data/ds114_test<< parameters.test >>_freesurfer_precomp_v6.0.0/00_group* \
157+
${HOME}/outputs<< parameters.test >>/
158+
cat ${HOME}/outputs<< parameters.test >>/00_group2_stats_tables/lh.aparc.thickness.tsv
159+
cat ${HOME}/outputs<< parameters.test >>/00_group2_stats_tables/euler.tsv
169160
170161
- store_artifacts:
171-
path: ~/outputs1
172-
- store_artifacts:
173-
path: ~/outputs2
162+
path: ~/outputs<< parameters.test >>
174163

175164
deploy:
176165
machine:
@@ -183,43 +172,59 @@ jobs:
183172
- attach_workspace:
184173
at: /tmp/workspace
185174
- run:
175+
name: load image
186176
command: |
187177
docker load -i /tmp/workspace/docker/image_fs<< parameters.version >>.tar
188178
- run:
179+
name: push to dockerhub
189180
command: |
190181
if [[ -n "${DOCKER_TOKEN}" ]]; then
191182
192-
# make sure we have a lowercase repo
193-
user_name="bids"
194-
repo_name=$(echo "${CIRCLE_PROJECT_REPONAME}" | tr '[:upper:]' '[:lower:]')
195-
FS_MAJOR_VERSION=<< parameters.version >>
196-
if [[ FS_MAJOR_VERSION -eq 6 ]]; then
197-
FS_VERSION=6.0.1
198-
else
199-
FS_VERSION=7.4.1
200-
fi
183+
echo "${DOCKER_TOKEN}" | docker login -u "${DOCKER_USER}" --password-stdin
184+
185+
# make sure we have a lowercase repo
186+
user_name="bids"
187+
188+
repo_name=$(echo "${CIRCLE_PROJECT_REPONAME}" | tr '[:upper:]' '[:lower:]')
189+
190+
FS_MAJOR_VERSION=<< parameters.version >>
191+
if [[ FS_MAJOR_VERSION -eq 6 ]]; then
192+
FS_VERSION=6.0.1
193+
else
194+
FS_VERSION=7.4.1
195+
fi
196+
197+
: "Pushing unstable versions for ${FS_MAJOR_VERSION} to DockerHub"
198+
199+
unstable="${user_name}/${repo_name}:${FS_VERSION}-unstable"
200+
major_unstable="${user_name}/${repo_name}:${FS_MAJOR_VERSION}-unstable"
201201
202-
if [[ -n "${DOCKER_TOKEN}" ]]; then
203-
echo "${DOCKER_TOKEN}" | docker login -u "${DOCKER_USER}" --password-stdin
202+
docker tag "${user_name}/${repo_name}_fs<< parameters.version >>" "${unstable}"
203+
docker push "${unstable}"
204+
docker tag "${unstable}" "${major_unstable}"
205+
docker push "${major_unstable}"
204206
205-
: "Pushing to DockerHub ${user_name}/${repo_name}:unstable"
206-
docker tag "${user_name}/${repo_name}" "${user_name}/${repo_name}:${FS_VERSION}-unstable"
207-
docker push "${user_name}/${repo_name}:${FS_VERSION}-unstable"
207+
if [[ -n "${CIRCLE_TAG}" ]]; then
208208
209-
if [[ -n "${CIRCLE_TAG}" ]]; then
210-
: "Pushing to DockerHub ${user_name}/${repo_name}:${FS_VERSION}-${CIRCLE_TAG}"
211-
if [[ FS_MAJOR_VERSION -eq 6 ]]; then
212-
docker push "${user_name}/${repo_name}:latest"
213-
fi
209+
: "Pushing stable and latest versions for ${FS_VERSION} to DockerHub"
214210
215-
docker tag "${user_name}/${repo_name}" "${user_name}/${repo_name}:${FS_MAJOR_VERSION}"
216-
docker push ${user_name}/${repo_name}:${FS_MAJOR_VERSION}
217-
docker tag "${user_name}/${repo_name}" "${user_name}/${repo_name}:${FS_VERSION}-${CIRCLE_TAG}"
218-
docker push "${user_name}/${repo_name}:${FS_VERSION}-${CIRCLE_TAG}"
219-
fi
211+
latest="${user_name}/${repo_name}:latest"
220212
213+
if [[ FS_MAJOR_VERSION -eq 6 ]]; then
214+
docker tag "${unstable}" "${latest}"
215+
docker push "${latest}"
221216
fi
222217
218+
major_tagged_release="${user_name}/${repo_name}:${FS_MAJOR_VERSION}-${CIRCLE_TAG}"
219+
docker tag "${major_unstable}" "${major_tagged_release}"
220+
docker push "${major_tagged_release}"
221+
222+
tagged_release="${user_name}/${repo_name}:${FS_VERSION}-${CIRCLE_TAG}"
223+
docker tag "${unstable}" "${tagged_release}"
224+
docker push "${tagged_release}"
225+
226+
fi
227+
223228
else
224229
: "No DOCKER_TOKEN, skipping push to DockerHub"
225230
exit 1
@@ -248,10 +253,11 @@ workflows:
248253
only: /.*/
249254

250255
- test:
251-
name: test_<< matrix.version >>
256+
name: test_<< matrix.version >>_<< matrix.test >>
252257
matrix:
253258
parameters:
254259
version: ['6', '7']
260+
test: ['1', '2']
255261
requires:
256262
- build_<< matrix.version >>
257263
- get_data
@@ -268,9 +274,10 @@ workflows:
268274
context:
269275
- dockerhub
270276
requires:
271-
- test_<< matrix.version >>
277+
- test_<< matrix.version >>_1
278+
- test_<< matrix.version >>_2
272279
filters:
273280
branches:
274-
ignore: /.*/
281+
only: /.*/
275282
tags:
276283
only: /.*/

.travis.yml

Lines changed: 0 additions & 22 deletions
This file was deleted.

README.md

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,35 @@
1+
2+
[![Docker version](https://img.shields.io/docker/pulls/bids/freesurfer.svg?style=plastic)](https://hub.docker.com/r/bids/freesurfer)
13
## Freesurfer recon-all BIDS App
24

35
### Description
4-
This app implements surface reconstruction using Freesurfer. It reconstructs the surface for each subject individually and then
5-
creates a study specific template. In case there are multiple sessions the Freesurfer longitudinal pipeline is used (creating subject specific templates) unless instructed to combine data across sessions. This app is available for both Freesurfer 6 and 7.
6+
This app implements surface reconstruction using Freesurfer.
7+
It reconstructs the surface for each subject individually
8+
and then creates a study specific template.
9+
In case there are multiple sessions the Freesurfer longitudinal pipeline is used
10+
(creating subject specific templates) unless instructed to combine data across sessions.
11+
This app is available for both Freesurfer 6 and 7.
612

7-
The current Freesurfer version for Freesurfer 6 is based on: freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.1.tar.gz
8-
The current Freesurfer version for Freesurfer 7 is based on: freesurfer-linux-centos7_x86_64-7.4.1.tar.gz
13+
The current Freesurfer version for Freesurfer 6 is based on:
914

10-
We only plan to support ove version of Freesurfer 6 and Freesurfer 7 at a time.
15+
- `freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.1.tar.gz`
1116

12-
The output of the pipeline consist of the SUBJECTS_DIR created during the analysis.
17+
The current Freesurfer version for Freesurfer 7 is based on:
1318

14-
### How to get it
19+
- `freesurfer-linux-centos7_x86_64-7.4.1.tar.gz`
20+
21+
We only plan to support only one version of Freesurfer 6 and Freesurfer 7 at a time.
22+
23+
The output of the pipeline consist of the `SUBJECTS_DIR` created during the analysis.
1524

25+
### How to get it
1626
Freesurfer 6 will remain the default image till 2024, at which point Freesurfer 7 will become the default.
1727

18-
You can get the default version with `docker pull bids/freesurfer`.
28+
You can get the default version with `docker pull bids/freesurfer`.
1929

20-
Freesurfer 7 is available at `docker pull bids/freesurfer:7`.
30+
Freesurfer 7 is available at `docker pull bids/freesurfer:7`.
2131

22-
Freesurfer 6 is available at `docker pull bids/freesurfer:6`.
32+
Freesurfer 6 is available at `docker pull bids/freesurfer:6`.
2333

2434
### Documentation
2535
- [Surface reconstruction](https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all)
@@ -149,12 +159,12 @@ This App has the following command line arguments:
149159
To run it in participant level mode (for one participant):
150160

151161
docker run -ti --rm \
152-
-v /Users/filo/data/ds005:/bids_dataset:ro \
153-
-v /Users/filo/outputs:/outputs \
154-
-v /Users/filo/freesurfer_license.txt:/license.txt \
155-
bids/freesurfer \
156-
/bids_dataset /outputs participant --participant_label 01 \
157-
--license_file "/license.txt"
162+
-v /Users/filo/data/ds005:/bids_dataset:ro \
163+
-v /Users/filo/outputs:/outputs \
164+
-v /Users/filo/freesurfer_license.txt:/license.txt \
165+
bids/freesurfer \
166+
/bids_dataset /outputs participant --participant_label 01 \
167+
--license_file "/license.txt"
158168

159169

160170
#### Group level
@@ -165,12 +175,12 @@ group level analyses can be run.
165175
To create a study specific template run:
166176

167177
docker run -ti --rm \
168-
-v /Users/filo/data/ds005:/bids_dataset:ro \
169-
-v /Users/filo/outputs:/outputs \
170-
-v /Users/filo/freesurfer_license.txt:/license.txt \
171-
bids/freesurfer \
172-
/bids_dataset /outputs group1 \
173-
--license_file "/license.txt"
178+
-v /Users/filo/data/ds005:/bids_dataset:ro \
179+
-v /Users/filo/outputs:/outputs \
180+
-v /Users/filo/freesurfer_license.txt:/license.txt \
181+
bids/freesurfer \
182+
/bids_dataset /outputs group1 \
183+
--license_file "/license.txt"
174184

175185
##### Stats and quality tables export
176186
To export tables with aggregated measurements within regions of
@@ -188,7 +198,8 @@ cortical parcellation and subcortical segementation, and a table with
188198
--license_file "/license.txt"
189199
Also see the *--parcellations* and *--measurements* arguments.
190200

191-
This step writes ouput into `<output_dir>/00_group2_stats_tables/`. E.g.:
201+
This step writes ouput into `<output_dir>/00_group2_stats_tables/`.
202+
E.g.:
192203

193204
* `lh.aparc.thickness.tsv` contains cortical thickness values for the
194205
left hemisphere extracted via the aparac parcellation.

0 commit comments

Comments
 (0)