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