Move .build-template.yml definitions closer to point of use.
[alexxy/gromacs.git] / admin / gitlab-ci / archive.gitlab-ci.yml
1 # Packages, exported artifacts, and release engineering processes.
2
3 .release-version-template:
4   # Docker image uploaded to dockerhub by user eriklindahl
5   # TODO: Get DockerFile for admin/dockerfiles
6   image: biophysics/gcc-gromacs
7   stage: configure-build
8
9   variables:
10     KUBERNETES_CPU_LIMIT: 1
11     KUBERNETES_CPU_REQUEST: 1
12     KUBERNETES_MEMORY_LIMIT: 2Gi
13
14   only:
15     refs:
16       - merge_requests
17       - schedules
18       - web
19     variables:
20       - $GROMACS_RELEASE
21   script:
22     - cmake -P cmake/gmxVersionInfo.cmake &> version.json
23
24   artifacts:
25     paths:
26       - version.json
27
28 prepare-release-version:
29   extends:
30     - .regressiontests-extends-template
31     - .release-version-template
32
33 # Special job to package regressiontest files and have them available for testing
34 # Runs during pre-build
35 # Set up to only fetch the files and prepare everything for merge requests
36 .regressiontests-template:
37   image: biophysics/gcc-gromacs
38   stage: configure-build
39
40   variables:
41     KUBERNETES_CPU_LIMIT: 1
42     KUBERNETES_CPU_REQUEST: 1
43     KUBERNETES_MEMORY_LIMIT: 2Gi
44   only:
45     refs:
46       - merge_requests
47       - schedules
48       - web
49   except:
50     variables:
51       - $GROMACS_RELEASE
52   # Always clone the default version for this branch, master in this case
53   script:
54     - export REGTESTBRANCH=master
55     - if [ ! -z $CI_MERGE_REQUEST_TARGET_BRANCH_NAME ] ; then
56       if [[ ! -d regressiontests ]] ; then
57       mkdir regressiontests ;
58       cd regressiontests ;
59       git init ;
60       cd .. ;
61       fi ;
62       cd regressiontests ;
63       git fetch https://gitlab.com/gromacs/gromacs-regressiontests.git $REGTESTBRANCH ;
64       git checkout -qf FETCH_HEAD ;
65       git clean -ffdxq ;
66       git gc ;
67       git archive -o gmx-regressiontests.tar.gz --prefix regressiontests/ -9 HEAD;
68       echo "Build regressiontests for branch $CI_MERGE_REQUEST_TARGET_BRANCH_NAME";
69       cd ..;
70       else
71       touch regressiontests;
72       tar czf gmx-regressiontests.tar.gz regressiontests ;
73       fi;
74   artifacts:
75     paths:
76       - gmx-regressiontests.tar.gz
77
78 .regressiontests-release-template:
79   # Docker image uploaded to dockerhub by user eriklindahl
80   # TODO: Get DockerFile for admin/dockerfiles
81   image: biophysics/gcc-gromacs
82   stage: release-package
83
84   variables:
85     KUBERNETES_CPU_LIMIT: 1
86     KUBERNETES_CPU_REQUEST: 1
87     KUBERNETES_MEMORY_LIMIT: 2Gi
88   only:
89     refs:
90       - schedules
91       - web
92       - triggers
93     variables:
94       - $GROMACS_RELEASE
95   script:
96     - VERSION=`cat version.json |
97       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
98     - REGTESTNAME="regressiontests-"$VERSION
99     - if [[ $GROMACS_RELEASE != "true" ]] ; then
100       REGTESTNAME=$REGTESTNAME-dev ;
101       fi
102     - export REGTESTBRANCH=master
103     - if [[ $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "release-20"[1-2][0-9] ]] ; then
104       export REGTESTBRANCH=$CI_COMMIT_REF_NAME ;
105       fi
106     - if [[ ! -d regressiontests ]] ; then
107       mkdir regressiontests ;
108       cd regressiontests ;
109       git init ;
110       cd .. ;
111       fi
112     - cd regressiontests
113     - git fetch https://gitlab.com/gromacs/gromacs-regressiontests.git $REGTESTBRANCH
114     - git checkout -qf FETCH_HEAD
115     - git clean -ffdxq
116     - git gc
117     - git archive -o $REGTESTNAME.tar.gz --prefix $REGTESTNAME/ -9 HEAD
118     - mv $REGTESTNAME.tar.gz ..
119     - echo "Build regressiontests for branch  $REGTESTBRANCH"
120     - cd ..
121   artifacts:
122     paths:
123       - regressiontests-*.tar.gz
124
125 .regressiontests-extends-template:
126   extends:
127     - .no-cache-template
128     - .variables:default
129
130 prepare-regressiontests:
131   extends:
132     - .regressiontests-extends-template
133     - .regressiontests-template
134
135 package-regressiontests-release:
136   extends:
137     - .regressiontests-extends-template
138     - .regressiontests-release-template
139   needs:
140     - job: prepare-release-version
141       artifacts: true
142   only:
143     refs:
144       - triggers
145       - web
146       - schedules
147     variables:
148       - $GROMACS_RELEASE
149
150 configure-archive-nightly:
151   stage: nightly-configure
152   only:
153     - triggers
154     - schedules
155   needs:
156     - job: simple-build
157       artifacts: false
158   except:
159     variables:
160       - $GROMACS_RELEASE
161   extends:
162     - .configure-docs
163   variables:
164     BUILD_DIR: build-package
165     CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None
166     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF
167     CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF
168
169 configure-archive-release:
170   only:
171     refs:
172       - web
173       - triggers
174       - schedules
175     variables:
176       - $GROMACS_RELEASE
177   extends:
178     - .configure-docs
179   variables:
180     BUILD_DIR: build-package
181     CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None
182     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF
183     CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF
184
185 # Right now we need to use an ugly hack to move the original build directory
186 # and the ccache files out of the build archive, as it is not possible to use
187 # the custom build directory due to https://gitlab.com/gitlab-org/gitlab-runner/issues/4203
188 # As soon as this is resolved we should use the separate build directories instead of
189 # manually hacking things. TODO
190 # Redmine #3361
191 .archive-build-template:
192   # Dockerfiles are from dockerhub, user eriklindahl
193   image: gromacs/ci-docs-clang:master
194   variables:
195     KUBERNETES_CPU_LIMIT: 4
196     KUBERNETES_CPU_REQUEST: 2
197     KUBERNETES_MEMORY_LIMIT: 4Gi
198   script:
199     - rm -rf gromacs*tar.gz
200     - cd $BUILD_DIR
201     - cmake --build . --target gmx -- -j4 2>&1 | tee buildLogFile.log
202     - cmake --build . --target man -- -j4 2>&1 | tee manBuildLogFile.log
203     - cmake --build . --target completion -- -j4 2>&1 | tee completionBuildLogFile.log
204     - cmake --build . --target install-guide -- -j4 2>&1 | tee installGuideBuildLogFile.log
205     - cmake --build . --target reference_checksum -- -j4 2>&1 | tee checksumBuildLogFile.log
206     - cmake --build . --target package_source -- -j4 2>&1 | tee packageBuildLogFile.log
207     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log manBuildLogFile.log
208       completionBuildLogFile.log installGuideBuildLogFile.log checksumBuildLogFile.log
209       packageBuildLogFile.log | grep -v "CMake" | tee buildErrors.log || true
210     - grep "cannot be built" buildLogFile.log manBuildLogFile.log
211       completionBuildLogFile.log installGuideBuildLogFile.log checksumBuildLogFile.log
212       packageBuildLogFile.log | tee -a buildErrors.log || true
213     - if [ -s buildErrors.log ] ; then echo "Found warnings during build"; cat buildErrors.log; exit 1; fi
214     - mv gromacs*tar.gz ..
215     - cd ..
216     # ugly hack begins here
217     - mkdir tempdir
218     - SOURCETARBALL=`ls gromacs*tar.gz`
219     - mv $SOURCETARBALL tempdir
220     - cd tempdir
221     - tar -xf $SOURCETARBALL
222     - rm -rf gromacs-*/$BUILD_DIR
223     - tar -c --gzip -f $SOURCETARBALL gromacs-*/
224     - mv $SOURCETARBALL ..
225     - cd ..
226     - rm -rf tempdir
227     # Hack ends here
228   artifacts:
229     when: always
230     expire_in: 1 week
231     paths:
232       - $BUILD_DIR/*log
233       - gromacs*tar.gz
234
235 .build-archive:
236   extends:
237     - .build-extends-template
238     - .documentation-before-script-template
239     - .build-docs-binary-template
240     - .archive-build-template
241
242 build-archive-nightly:
243   extends:
244     - .build-archive
245   stage: nightly-build
246   needs:
247     - job: simple-build
248       artifacts: false
249     - job: configure-archive-nightly
250       artifacts: true
251   only:
252     - triggers
253     - schedules
254   except:
255     variables:
256       - $GROMACS_RELEASE
257   variables:
258     BUILD_DIR: build-package
259
260 package-archive-release:
261   extends:
262     - .build-archive
263   stage: release-package
264   needs:
265     - job: configure-archive-release
266       artifacts: true
267   only:
268     refs:
269       - triggers
270       - web
271       - schedules
272     variables:
273       - $GROMACS_RELEASE
274   variables:
275     BUILD_DIR: build-package
276
277 .release-verify-template:
278   image: biophysics/gcc-gromacs
279   stage: release-verify
280
281   variables:
282     KUBERNETES_CPU_LIMIT: 1
283     KUBERNETES_CPU_REQUEST: 1
284     KUBERNETES_MEMORY_LIMIT: 2Gi
285
286   only:
287     refs:
288       - merge_requests
289       - schedules
290       - web
291     variables:
292       - $GROMACS_RELEASE
293   script:
294     - VERSION=`cat version.json |
295       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
296     - if [[ $GROMACS_RELEASE != "true" ]] ; then
297       VERSION=$VERSION-dev ;
298       fi
299     - REGTEST_COMPARE=`cat version.json |
300       python3 -c "import json,sys; print(json.load(sys.stdin)['regressiontest-md5sum'])"`
301     - SOURCENAME=gromacs-$VERSION
302     - SOURCETARBALL=$SOURCENAME.tar.gz
303     - SOURCE_MD5SUM=`md5sum $SOURCETARBALL | awk '{print $1}'`
304     - REGTESTNAME=regressiontests-$VERSION
305     - REGTESTTARBALL=$REGTESTNAME.tar.gz
306     - REGTEST_MD5SUM=`md5sum $REGTESTTARBALL | awk '{print $1}'`
307     - echo "$SOURCETARBALL md5sum = $SOURCE_MD5SUM"
308     - echo "$REGTESTTARBALL md5sum = $REGTEST_MD5SUM"
309     - echo "$REGTESTTARBALL reference md5sum = $REGTEST_COMPARE"
310     - if [[ $REGTEST_COMPARE != $REGTEST_MD5SUM && $GROMACS_RELEASE == "true" ]] ; then
311       echo "Mismatch in regressiontest md5sums";
312       exit 1;
313       fi
314
315 release-verify:
316   extends:
317     - .regressiontests-extends-template
318     - .release-verify-template
319   only:
320     refs:
321       - triggers
322       - web
323       - schedules
324     variables:
325       - $GROMACS_RELEASE
326   dependencies:
327     - package-archive-release
328     - package-regressiontests-release
329     - prepare-release-version
330
331 webpage-archive-release:
332   extends:
333     - .build-docs-webpage
334     - .configure-gmxapi-template
335   stage: release-deploy
336   only:
337     refs:
338       - web
339       - triggers
340       - schedules
341     variables:
342       - $GROMACS_RELEASE
343   dependencies:
344     - webpage-build-release
345     - package-archive-release
346     - package-regressiontests-release
347   variables:
348     BUILD_DIR: release-doc-builds
349   script:
350     - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
351   artifacts:
352     when: always
353     paths:
354       - webpage.tar.gz
355       - gromacs-*tar.gz
356       - regressiontests-*tar.gz
357