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