|
| 1 | +setup: true |
1 | 2 | version: 2.1 |
2 | | - |
3 | | -commands: |
4 | | - build-images: |
5 | | - parameters: |
6 | | - variant: |
7 | | - type: string |
8 | | - default: "" |
9 | | - steps: |
10 | | - - set-up-variant: |
11 | | - variant: "<< parameters.variant >>" |
12 | | - - run: |
13 | | - name: "Building Docker image" |
14 | | - command: | |
15 | | - docker build -t fcpindi/c-pac:${DOCKER_TAG} . ${DOCKERFILE} |
16 | | - docker save fcpindi/c-pac:${DOCKER_TAG} | gzip > ${DOCKER_TARBALL}.tar.gz |
17 | | - no_output_timeout: 5h |
18 | | - - run: |
19 | | - name: "Starting local registry" |
20 | | - command: docker run -d -p 5000:5000 --restart=always --name registry registry:2 |
21 | | - - install-singularity-requirements |
22 | | - - when: |
23 | | - condition: |
24 | | - or: |
25 | | - - equal: [ "", "<< parameters.variant >>" ] |
26 | | - - equal: [ "lite", "<< parameters.variant >>" ] |
27 | | - steps: |
28 | | - - run: |
29 | | - name: "Cloning Singularity 2.5.2" |
30 | | - command: git clone -b 2.5.2 https://github.com/sylabs/singularity |
31 | | - - set-up-singularity |
32 | | - - run: |
33 | | - name: "Building Singularity image from Docker image" |
34 | | - command: | |
35 | | - docker load < ${DOCKER_TARBALL}.tar.gz |
36 | | - docker tag fcpindi/c-pac:${CIRCLE_BRANCH//\//_}${VARIANT} localhost:5000/fcpindi/c-pac:${CIRCLE_BRANCH//\//_}${VARIANT} |
37 | | - docker push localhost:5000/fcpindi/c-pac:${CIRCLE_BRANCH//\//_}${VARIANT} |
38 | | - SINGULARITY_NOHTTPS=1 singularity build cpac-singularity-image${VARIANT}.simg docker://localhost:5000/fcpindi/c-pac:${CIRCLE_BRANCH//\//_}${VARIANT} |
39 | | - no_output_timeout: 5h |
40 | | - check-for-built-images: |
41 | | - steps: |
42 | | - - run: |
43 | | - name: "Checking for locally built images" |
44 | | - command: | |
45 | | - if [[ ! -f cpac-docker-image.tar.gz || ! -f cpac-singularity-image.simg ]] |
46 | | - then |
47 | | - circleci step halt |
48 | | - fi |
49 | | - configure-git-user: |
50 | | - steps: |
51 | | - - add_ssh_keys: |
52 | | - fingerprints: |
53 | | - - "12:bc:f2:e4:31:cc:72:54:54:bc:f5:5b:89:e6:d8:ee" |
54 | | - - run: |
55 | | - name: "Configuring git user" |
56 | | - command: | |
57 | | - sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 78BD65473CB3BD13 |
58 | | - curl -L https://packagecloud.io/circleci/trusty/gpgkey | sudo apt-key add - |
59 | | - sudo apt-get update |
60 | | - sudo apt-get install git -y |
61 | | - git config --global user.email "${CIRCLE_USERNAME}@users.noreply.github.com" |
62 | | - git config --global user.name "${CIRCLE_USERNAME} @ CircleCI" |
63 | | - get-sample-bids-data: |
64 | | - steps: |
65 | | - - run: |
66 | | - name: Getting Sample BIDS Data |
67 | | - command: git clone https://github.com/bids-standard/bids-examples.git |
68 | | - set-python-version: |
69 | | - steps: |
70 | | - - run: |
71 | | - name: "Setting Python Version" |
72 | | - command: | |
73 | | - cd /opt/circleci/.pyenv/plugins/python-build/../.. && git pull && cd - |
74 | | - pyenv install -v 3.7.9 |
75 | | - pyenv global 3.7.9 |
76 | | - install-singularity-requirements: |
77 | | - steps: |
78 | | - - run: |
79 | | - name: "Installing Singularity requirements" |
80 | | - command: | |
81 | | - sudo apt-get update && sudo apt-get install flawfinder squashfs-tools uuid-dev libuuid1 libffi-dev libssl-dev libssl1.1 libarchive-dev libgpgme11-dev libseccomp-dev -y |
82 | | - run-pytest-docker: |
83 | | - steps: |
84 | | - - run: |
85 | | - name: Running pytest on Docker image |
86 | | - command: | |
87 | | - docker load < cpac-docker-image.tar.gz |
88 | | - docker run -dit -P -v /home/circleci/project/test-results:/code/test-results -v /home/circleci/project/htmlcov:/code/htmlcov --entrypoint=/bin/bash --name docker_test fcpindi/c-pac:${DOCKER_TAG} |
89 | | - docker exec docker_test /bin/bash ./code/dev/circleci_data/test_in_image.sh |
90 | | - set-up-singularity: |
91 | | - steps: |
92 | | - - run: |
93 | | - name: "Setting up Singularity" |
94 | | - command: | |
95 | | - cd singularity |
96 | | - ./autogen.sh |
97 | | - ./configure --prefix=/usr/local --sysconfdir=/etc |
98 | | - make |
99 | | - sudo make install |
100 | | - cd .. |
101 | | - set-up-variant: |
102 | | - parameters: |
103 | | - variant: |
104 | | - type: string |
105 | | - steps: |
106 | | - - run: |
107 | | - name: "Setting up variant" |
108 | | - command: | |
109 | | - DOCKER_TARBALL="cpac-docker-image" |
110 | | - if [[ -n "<< parameters.variant >>" ]] |
111 | | - then |
112 | | - DOCKERFILE="variant-<< parameters.variant >>.Dockerfile" |
113 | | - if [[ -f ${DOCKERFILE} ]] |
114 | | - then |
115 | | - sed -i "s|:latest|:${CIRCLE_BRANCH//\//_}|g" ${DOCKERFILE} |
116 | | - fi |
117 | | - DOCKER_TARBALL="${DOCKER_TARBALL}-<< parameters.variant >>" |
118 | | - VARIANT="-<< parameters.variant >>" |
119 | | - echo "export DOCKERFILE=\"-f ${DOCKERFILE}\"" >> $BASH_ENV |
120 | | - fi |
121 | | - echo "export DOCKER_TARBALL=${DOCKER_TARBALL}" >> $BASH_ENV |
122 | | - echo "export VARIANT=${VARIANT}" >> $BASH_ENV |
123 | | - DOCKER_TAG=${CIRCLE_BRANCH//\//_}${VARIANT} |
124 | | - echo "export DOCKER_TAG=${DOCKER_TAG}" >> $BASH_ENV |
125 | | - test-singularity-installation: |
126 | | - steps: |
127 | | - - run: |
128 | | - name: Testing Singularity installation |
129 | | - command: | |
130 | | - pip install -r dev/circleci_data/requirements.txt |
131 | | - coverage run -m pytest --junitxml=test-results/junit.xml --continue-on-collection-errors dev/circleci_data/test_install.py |
132 | | -
|
133 | | -jobs: |
134 | | - pytest-docker: |
135 | | - parameters: |
136 | | - variant: |
137 | | - type: string |
138 | | - default: "" |
139 | | - machine: |
140 | | - image: ubuntu-2004:202010-01 |
141 | | - steps: |
142 | | - - attach_workspace: |
143 | | - at: /home/circleci/ |
144 | | - - set-up-variant: |
145 | | - variant: "<< parameters.variant >>" |
146 | | - - check-for-built-images |
147 | | - - set-python-version |
148 | | - - get-sample-bids-data |
149 | | - - run-pytest-docker |
150 | | - - store_test_results: |
151 | | - path: test-results |
152 | | - - store_artifacts: |
153 | | - path: test-results |
154 | | - - store_artifacts: |
155 | | - path: htmlcov |
156 | | - |
157 | | - pytest-singularity: |
158 | | - machine: |
159 | | - image: ubuntu-2004:202010-01 |
160 | | - steps: |
161 | | - - attach_workspace: |
162 | | - # Must be absolute path or relative path from working_directory |
163 | | - at: /home/circleci/ |
164 | | - - check-for-built-images |
165 | | - - set-python-version |
166 | | - - install-singularity-requirements |
167 | | - - set-up-singularity |
168 | | - - test-singularity-installation |
169 | | - |
170 | | - build: |
171 | | - machine: |
172 | | - image: ubuntu-2004:202010-01 |
173 | | - steps: |
174 | | - - checkout |
175 | | - - set-python-version |
176 | | - - configure-git-user |
177 | | - - run: |
178 | | - name: "Checking if version needs updated" |
179 | | - # update version if version needs updated, otherwise just move on |
180 | | - command: | |
181 | | - COMMIT_MESSAGE=$(git log -1 --pretty=%B) |
182 | | - if [[ ! "$COMMIT_MESSAGE" == *"Update version to"* ]] |
183 | | - then |
184 | | - cd $HOME/project/CPAC |
185 | | - VERSION=$(python -c "from info import __version__; print('.'.join(('.'.join(__version__[::-1].split('-')[1].split('.')[1:])[::-1], __version__.split('-')[1])) if '-' in __version__ else __version__)") |
186 | | - cd .. |
187 | | - echo "v${VERSION}" > version |
188 | | - sed -i -r "s/^(# [Vv]ersion ).*$/# Version ${VERSION}/g" dev/docker_data/default_pipeline.yml |
189 | | - find ./CPAC/resources/configs -name "*.yml" -exec sed -i -r "s/^(# [Vv]ersion ).*$/# Version ${VERSION}/g" {} \; |
190 | | - git add version CPAC/resources/configs dev/docker_data/default_pipeline.yml |
191 | | - if [[ ! -z $(git diff origin/${CIRCLE_BRANCH}) ]] |
192 | | - then |
193 | | - git commit -m ":bookmark: Update version to ${VERSION} ($COMMIT_MESSAGE)" |
194 | | - git push origin HEAD:${CIRCLE_BRANCH} || true |
195 | | - circleci step halt |
196 | | - fi |
197 | | - cd .. |
198 | | - fi |
199 | | - - build-images |
200 | | - - store_artifacts: |
201 | | - path: cpac-docker-image.tar.gz |
202 | | - - store_artifacts: |
203 | | - path: cpac-singularity-image.simg |
204 | | - - persist_to_workspace: |
205 | | - root: /home/circleci/ |
206 | | - paths: |
207 | | - - cpac-docker-image.tar.gz |
208 | | - - cpac-singularity-image.simg |
209 | | - - project |
210 | | - build-lite: |
211 | | - machine: |
212 | | - image: ubuntu-2004:202010-01 |
213 | | - steps: |
214 | | - - checkout |
215 | | - - set-python-version |
216 | | - - build-images: |
217 | | - variant: lite |
218 | | - - store_artifacts: |
219 | | - path: cpac-docker-image-lite.tar.gz |
220 | | - - store_artifacts: |
221 | | - path: cpac-singularity-image-lite.simg |
222 | | - |
| 3 | +orbs: |
| 4 | + continuation: circleci/[email protected] |
223 | 5 | workflows: |
224 | | - version: 2 |
225 | | - build-and-test: |
| 6 | + setup: |
226 | 7 | jobs: |
227 | | - - build: |
228 | | - name: "Build images" |
229 | | - - build-lite: |
230 | | - name: "Build lite variant images" |
231 | | - - pytest-docker: |
232 | | - name: "Test in Docker" |
233 | | - requires: |
234 | | - - "Build images" |
235 | | - - pytest-docker: |
236 | | - name: "Test lite variant in Docker" |
237 | | - requires: |
238 | | - - "Build lite variant images" |
239 | | - variant: lite |
240 | | - - pytest-singularity: |
241 | | - name: "Test in Singularity" |
242 | | - requires: |
243 | | - - "Build images" |
244 | | - - pytest-singularity: |
245 | | - name: "Test lite variant in Singularity" |
246 | | - requires: |
247 | | - - "Build lite variant images" |
| 8 | + - continuation/continue: |
| 9 | + configuration_path: ".circleci/main.yml" |
| 10 | + parameters: /home/circleci/test.json |
| 11 | + pre-steps: |
| 12 | + - run: |
| 13 | + command: | |
| 14 | + echo '{ "owner": "'${CIRCLE_PROJECT_USERNAME}'", "branch": "'${CIRCLE_BRANCH}'" }' >> /home/circleci/test.json |
| 15 | +
|
0 commit comments