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