Normalize naming for gromacs build/testing jobs.
[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     - .variables:default
128   cache: {}
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     - .gromacs:base:build
238     - .use-ccache
239     - .variables:default
240     - .documentation-before-script-template
241     - .build-docs-binary-template
242     - .archive-build-template
243
244 build-archive-nightly:
245   extends:
246     - .build-archive
247   stage: nightly-build
248   needs:
249     - job: simple-build
250       artifacts: false
251     - job: configure-archive-nightly
252       artifacts: true
253   only:
254     - triggers
255     - schedules
256   except:
257     variables:
258       - $GROMACS_RELEASE
259   variables:
260     BUILD_DIR: build-package
261
262 package-archive-release:
263   extends:
264     - .build-archive
265   stage: release-package
266   needs:
267     - job: configure-archive-release
268       artifacts: true
269   only:
270     refs:
271       - triggers
272       - web
273       - schedules
274     variables:
275       - $GROMACS_RELEASE
276   variables:
277     BUILD_DIR: build-package
278
279 .release-verify-template:
280   image: biophysics/gcc-gromacs
281   stage: release-verify
282
283   variables:
284     KUBERNETES_CPU_LIMIT: 1
285     KUBERNETES_CPU_REQUEST: 1
286     KUBERNETES_MEMORY_LIMIT: 2Gi
287
288   only:
289     refs:
290       - merge_requests
291       - schedules
292       - web
293     variables:
294       - $GROMACS_RELEASE
295   script:
296     - VERSION=`cat version.json |
297       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
298     - if [[ $GROMACS_RELEASE != "true" ]] ; then
299       VERSION=$VERSION-dev ;
300       fi
301     - REGTEST_COMPARE=`cat version.json |
302       python3 -c "import json,sys; print(json.load(sys.stdin)['regressiontest-md5sum'])"`
303     - SOURCENAME=gromacs-$VERSION
304     - SOURCETARBALL=$SOURCENAME.tar.gz
305     - SOURCE_MD5SUM=`md5sum $SOURCETARBALL | awk '{print $1}'`
306     - REGTESTNAME=regressiontests-$VERSION
307     - REGTESTTARBALL=$REGTESTNAME.tar.gz
308     - REGTEST_MD5SUM=`md5sum $REGTESTTARBALL | awk '{print $1}'`
309     - echo "$SOURCETARBALL md5sum = $SOURCE_MD5SUM"
310     - echo "$REGTESTTARBALL md5sum = $REGTEST_MD5SUM"
311     - echo "$REGTESTTARBALL reference md5sum = $REGTEST_COMPARE"
312     - if [[ $REGTEST_COMPARE != $REGTEST_MD5SUM && $GROMACS_RELEASE == "true" ]] ; then
313       echo "Mismatch in regressiontest md5sums";
314       exit 1;
315       fi
316
317 release-verify:
318   extends:
319     - .regressiontests-extends-template
320     - .release-verify-template
321   only:
322     refs:
323       - triggers
324       - web
325       - schedules
326     variables:
327       - $GROMACS_RELEASE
328   dependencies:
329     - package-archive-release
330     - package-regressiontests-release
331     - prepare-release-version
332
333 webpage-archive-release:
334   extends:
335     - .build-docs-webpage
336     - .configure-gmxapi-template
337   stage: release-deploy
338   only:
339     refs:
340       - web
341       - triggers
342       - schedules
343     variables:
344       - $GROMACS_RELEASE
345   dependencies:
346     - webpage-build-release
347     - package-archive-release
348     - package-regressiontests-release
349   variables:
350     BUILD_DIR: release-doc-builds
351   script:
352     - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
353   artifacts:
354     when: always
355     paths:
356       - webpage.tar.gz
357       - gromacs-*tar.gz
358       - regressiontests-*tar.gz
359