65b9bec66b08361dfb0e8120d2bd0defb0bc9c12
[alexxy/gromacs.git] / admin / gitlab-ci / gromacs.gitlab-ci.yml
1 # Build, test, and install variously configured GROMACS installations.
2
3 # Initial build that always needs to pass before follow-up stages run
4 simple-build:
5   extends:
6     - .variables:default
7     - .use-ccache
8     - .use-clang:base
9     - .rules:basic-push
10   stage: pre-build
11   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
12   variables:
13     KUBERNETES_CPU_LIMIT: 8
14     KUBERNETES_CPU_REQUEST: 4
15     KUBERNETES_MEMORY_REQUEST: 8Gi
16     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
17     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
18     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
19     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
20     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
21     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
22     COMPILER_MAJOR_VERSION: 9
23     BUILD_DIR: simple-build
24   script:
25     - echo $CMAKE_COMPILER_SCRIPT
26     - echo $CMAKE_EXTRA_OPTIONS
27     - echo $CMAKE_SIMD_OPTIONS
28     - echo $CMAKE_GPU_OPTIONS
29     - echo $CMAKE_MPI_OPTIONS
30     - echo $CMAKE_PRECISION_OPTIONS
31     - echo $CMAKE_BUILD_TYPE_OPTIONS
32     - echo $CMAKE_GMXAPI_OPTIONS
33     - if [[ -d $BUILD_DIR ]] ; then
34       echo "Cleaning up build directory" ;
35       rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
36       else
37       echo "Preparing new build directory" ;
38       mkdir $BUILD_DIR ;
39       fi
40     - cd $BUILD_DIR
41     - cmake ..
42       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
43       $CMAKE_COMPILER_SCRIPT
44       $CMAKE_EXTRA_OPTIONS
45       $CMAKE_SIMD_OPTIONS
46       $CMAKE_MPI_OPTIONS
47       $CMAKE_PRECISION_OPTIONS
48       $CMAKE_BUILD_TYPE_OPTIONS
49       $CMAKE_GPU_OPTIONS
50       $CMAKE_GMXAPI_OPTIONS
51       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
52       2>&1 | tee cmakeLog.log
53     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
54     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
55     - cmake --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
56     - cmake --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
57     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
58       | grep -v "CMake" | tee buildErrors.log || true
59     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
60     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
61     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
62     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
63     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
64       ctestLog.log | tee ctestErrors.log
65     - xsltproc $CI_PROJECT_DIR/scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
66     - if [ -s ctestErrors.log ] ; then
67       echo "Error during running ctest";
68       exit 1;
69       fi
70     - cd ..
71   artifacts:
72     reports:
73       junit: $BUILD_DIR/JUnitTestResults.xml
74     paths:
75       - $BUILD_DIR/*log
76     when: always
77     expire_in: 1 week
78
79 # Jobs running in first pre-build stage
80
81 .gromacs:base:configure:
82   extends:
83     - .variables:default
84   stage: configure-build
85   cache: {}
86   variables:
87     KUBERNETES_CPU_LIMIT: 1
88     KUBERNETES_CPU_REQUEST: 1
89     KUBERNETES_MEMORY_REQUEST: 2Gi
90     CMAKE_COMPILER_SCRIPT: ""
91     CMAKE_EXTRA_OPTIONS: ""
92     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
93     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
94     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
95     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
96     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
97   script:
98     - echo $CMAKE_COMPILER_SCRIPT
99     - echo $CMAKE_EXTRA_OPTIONS
100     - echo $CMAKE_SIMD_OPTIONS
101     - echo $CMAKE_GPU_OPTIONS
102     - echo $CMAKE_MPI_OPTIONS
103     - echo $CMAKE_PRECISION_OPTIONS
104     - echo $CMAKE_BUILD_TYPE_OPTIONS
105     - echo $CMAKE_GMXAPI_OPTIONS
106     - if [[ -d $BUILD_DIR ]] ; then
107       rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
108       else
109       echo "Preparing new build directory" ;
110       mkdir $BUILD_DIR ;
111       fi
112     - cd $BUILD_DIR
113     - cmake ..
114       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
115       $CMAKE_COMPILER_SCRIPT
116       $CMAKE_EXTRA_OPTIONS
117       $CMAKE_SIMD_OPTIONS
118       $CMAKE_MPI_OPTIONS
119       $CMAKE_PRECISION_OPTIONS
120       $CMAKE_BUILD_TYPE_OPTIONS
121       $CMAKE_GPU_OPTIONS
122       $CMAKE_GMXAPI_OPTIONS
123       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
124       2>&1 | tee cmakeLog.log
125     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
126     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
127     - cd ..
128   artifacts:
129     when: always
130     paths:
131       - $BUILD_DIR
132
133 .gromacs:base:release:configure:
134   extends:
135     - .variables:default
136   stage: release-configure
137   cache: {}
138   variables:
139     KUBERNETES_CPU_LIMIT: 1
140     KUBERNETES_CPU_REQUEST: 1
141     KUBERNETES_MEMORY_REQUEST: 2Gi
142     CMAKE_COMPILER_SCRIPT: ""
143     CMAKE_EXTRA_OPTIONS: ""
144     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
145     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
146     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
147     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
148     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
149     CMAKE_REGRESSIONTEST_OPTIONS: "-DREGRESSIONTEST_PATH=../\\$RELEASE_REGRESSIONTESTS"
150     RELEASE_BUILD_DIR: release-builds
151     RELEASE_SOURCE: release-source-from-tarball
152     RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
153   script:
154     - VERSION=`cat version.json |
155       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
156     - if [[ $GROMACS_RELEASE != "true" ]] ; then
157       VERSION=$VERSION-dev ;
158       fi
159     - SOURCENAME=gromacs-$VERSION
160     - SOURCETARBALL=$SOURCENAME.tar.gz
161     - REGTESTNAME=regressiontests-$VERSION
162     - REGTESTTARBALL=$REGTESTNAME.tar.gz
163     - echo "$SOURCETARBALL"
164     - echo "$REGTESTTARBALL"
165     - RELEASE_TARBALLS=release-tarballs
166     - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
167     - mv $SOURCETARBALL $RELEASE_TARBALLS
168     - mv $REGTESTTARBALL $RELEASE_TARBALLS
169     - cd $RELEASE_TARBALLS
170     # We rename the source and regressiontest directories
171     # to have names for them that don't change for different versions.
172     - tar -xf $SOURCETARBALL
173     - mv $SOURCENAME ../$RELEASE_SOURCE
174     - tar -xf $REGTESTTARBALL
175     - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
176     - rm $SOURCETARBALL $REGTESTTARBALL
177     - cd ..
178     - echo $CMAKE_COMPILER_SCRIPT
179     - echo $CMAKE_EXTRA_OPTIONS
180     - echo $CMAKE_SIMD_OPTIONS
181     - echo $CMAKE_GPU_OPTIONS
182     - echo $CMAKE_MPI_OPTIONS
183     - echo $CMAKE_PRECISION_OPTIONS
184     - echo $CMAKE_BUILD_TYPE_OPTIONS
185     - echo $CMAKE_GMXAPI_OPTIONS
186     - if [[ -d $RELEASE_BUILD_DIR ]] ; then
187       echo "Cleaning up build directory" ;
188       rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
189       else
190       echo "Preparing new build directory" ;
191       mkdir $RELEASE_BUILD_DIR ;
192       fi
193     - cd $RELEASE_BUILD_DIR
194     - cmake ../$RELEASE_SOURCE/
195       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
196       $CMAKE_COMPILER_SCRIPT
197       $CMAKE_EXTRA_OPTIONS
198       $CMAKE_SIMD_OPTIONS
199       $CMAKE_MPI_OPTIONS
200       $CMAKE_PRECISION_OPTIONS
201       $CMAKE_BUILD_TYPE_OPTIONS
202       $CMAKE_GPU_OPTIONS
203       $CMAKE_GMXAPI_OPTIONS
204       $CMAKE_REGRESSIONTEST_OPTIONS
205       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR
206       2>&1 | tee cmakeLog.log
207     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
208     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
209     - cd ..
210   artifacts:
211     when: always
212     paths:
213       - $RELEASE_BUILD_DIR
214       - $RELEASE_REGRESSIONTESTS
215       - $RELEASE_SOURCE
216
217 # Templates for configuration stage
218
219 gromacs:gcc-7:configure:
220   extends:
221     - .gromacs:base:configure
222     - .use-gcc:base
223     - .use-opencl
224     - .rules:merge-requests
225   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
226   variables:
227     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
228     CMAKE_EXTRA_OPTIONS: "-DGMX_EXTERNAL_CLFFT=ON"
229     COMPILER_MAJOR_VERSION: 7
230
231 gromacs:gcc-8-cuda-11.0:configure:
232   extends:
233     - .gromacs:base:configure
234     - .use-gcc:base
235     - .use-cuda
236     - .rules:merge-requests
237   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
238   variables:
239     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
240     COMPILER_MAJOR_VERSION: 8
241
242 gromacs:clang-TSAN:configure:
243   extends:
244     - .gromacs:base:configure
245     - .use-clang:base
246     - .rules:merge-requests
247   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
248   variables:
249     COMPILER_MAJOR_VERSION: 8
250     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=TSAN"
251
252 gromacs:clang-8:configure:
253   extends:
254     - .gromacs:base:configure
255     - .use-clang:base
256     - .rules:merge-requests
257   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
258   variables:
259     COMPILER_MAJOR_VERSION: 8
260
261 gromacs:clang-9-mpi:configure:
262   extends:
263    - .gromacs:base:configure
264    - .use-clang:base
265    - .use-mpi
266    - .rules:merge-requests
267   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
268   variables:
269     COMPILER_MAJOR_VERSION: 9
270     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
271
272 gromacs:clang-static-analyzer:configure:
273   extends:
274     - .gromacs:base:configure
275     - .use-clang:base
276     - .rules:merge-requests
277   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
278   variables:
279      CMAKE_COMPILER_SCRIPT: "-DCMAKE_CXX_COMPILER=/usr/local/libexec/c++-analyzer -DCMAKE_C_COMPILER=gcc"
280      CMAKE_EXTRA_OPTIONS: "-DGMX_CLANG_ANALYZER=ON -DGMX_OPENMP=OFF -DGMX_USE_RDTSCP=OFF -DGMX_FFT_LIBRARY=fftpack -DGMX_DEVELOPER_BUILD=ON"
281      CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
282
283 gromacs:clang-ASAN:configure:
284   extends:
285     - .gromacs:base:configure
286     - .use-clang:base
287     - .rules:merge-requests
288   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
289   variables:
290     COMPILER_MAJOR_VERSION: 8
291     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=ASAN"
292
293 gromacs:oneapi-2021.1-beta08-opencl:configure:
294   extends:
295    - .gromacs:base:configure
296    - .use-oneapi:base
297    - .use-opencl
298    - .rules:merge-requests
299   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
300   variables:
301     COMPILER_MAJOR_VERSION: 2021
302   before_script:
303     # Necessary to override gitlab default 'set -e' which breaks Intel's
304     # setvar.sh script
305     - set +e
306     - source /opt/intel/oneapi/setvars.sh
307
308 gromacs:clang-UBSAN:configure:
309   extends:
310     - .gromacs:base:configure
311     - .use-clang:base
312     - .rules:merge-requests
313   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
314   variables:
315     COMPILER_MAJOR_VERSION: 8
316     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=UBSAN"
317
318 gromacs:gcc-8-cuda-11.0:release:configure:
319   extends:
320     - .gromacs:base:release:configure
321     - .use-gcc:base
322     - .use-mpi
323     - .use-cuda
324     - .rules:nightly-only-for-release
325   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
326   variables:
327     COMPILER_MAJOR_VERSION: 8
328     RELEASE_BUILD_DIR: release-builds-gcc
329     CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_MDRUN_ONLY=ON"
330     CMAKE_BUILD_TYPE_OPTIONS : "-DCMAKE_BUILD_TYPE=RelWithAssert"
331     CMAKE_REGRESSIONTEST_OPTIONS: ""
332   dependencies:
333     - archive:package
334     - regressiontests:package
335     - prepare-release-version
336
337 gromacs:gcc-7:release:configure:
338   extends:
339     - .gromacs:base:release:configure
340     - .use-gcc:base
341     - .rules:nightly-only-for-release
342   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
343   variables:
344     COMPILER_MAJOR_VERSION: 7
345     RELEASE_BUILD_DIR: release-builds-gcc
346     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
347   dependencies:
348     - archive:package
349     - regressiontests:package
350     - prepare-release-version
351
352 gromacs:clang-9:release:configure:
353   extends:
354     - .gromacs:base:release:configure
355     - .use-clang:base
356     - .use-mpi
357     - .rules:nightly-only-for-release
358   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
359   variables:
360     COMPILER_MAJOR_VERSION: 9
361     RELEASE_BUILD_DIR: release-builds-clang
362     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
363     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
364   dependencies:
365     - archive:package
366     - regressiontests:package
367     - prepare-release-version
368
369 gromacs:clang-8-cuda-10.1:release:configure:
370   extends:
371     - .gromacs:base:release:configure
372     - .use-clang:base
373     - .use-cuda
374     - .rules:nightly-only-for-release
375   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
376   variables:
377     COMPILER_MAJOR_VERSION: 8
378     RELEASE_BUILD_DIR: release-builds-clang
379     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
380
381 gromacs:oneapi-2021.1-beta08-opencl:release:configure:
382   extends:
383    - .gromacs:base:release:configure
384    - .use-oneapi:base
385    - .use-opencl
386    - .rules:nightly-only-for-release
387   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
388   variables:
389     COMPILER_MAJOR_VERSION: 2021
390     RELEASE_BUILD_DIR: release-builds-oneapi
391   before_script:
392     # Necessary to override gitlab default 'set -e' which breaks Intel's
393     # setvar.sh script
394     - set +e
395     - source /opt/intel/oneapi/setvars.sh
396
397 # Jobs running during build stage
398
399 .gromacs:base:build:
400   stage: build
401   script:
402     - cd $BUILD_DIR
403     - cmake --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
404     - cmake --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
405     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
406       | grep -v "CMake" | tee buildErrors.log || true
407     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
408     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
409     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
410     - for file in `find . -mindepth 1 -name "*.o" ! -type l` ; do echo $file ; rm $file ; done 2>&1 > remove-build-objects.log
411     - cd ..
412   artifacts:
413     when: always
414     paths:
415       - $BUILD_DIR
416       - $INSTALL_DIR/
417
418 .gromacs:static-analyzer-build:
419   stage: build
420   script:
421     - cd $BUILD_DIR
422     - scan-build -o scan_html cmake --build . -- -j8 2>&1 | tee buildLogFile.log
423     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
424       | grep -v "CMake" | tee buildErrors.log || true
425     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
426     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
427     - cd ..
428   artifacts:
429     when: always
430     paths:
431       - $BUILD_DIR/scan_html
432
433 gromacs:gcc-7:build:
434   extends:
435     - .variables:default
436     - .gromacs:base:build
437     - .before_script:default
438     - .use-ccache
439     - .rules:merge-requests
440   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
441   needs:
442     - job: gromacs:gcc-7:configure
443       artifacts: true
444
445 gromacs:gcc-8-cuda-11.0:build:
446   extends:
447     - .variables:default
448     - .gromacs:base:build
449     - .before_script:default
450     - .use-ccache
451     - .rules:merge-requests
452   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
453   needs:
454     - job: gromacs:gcc-8-cuda-11.0:configure
455
456 gromacs:clang-TSAN:build:
457   extends:
458     - .variables:default
459     - .gromacs:base:build
460     - .use-clang:base
461     - .use-ccache
462     - .rules:merge-requests
463   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
464   needs:
465     - job: gromacs:clang-TSAN:configure
466
467 gromacs:clang-ASAN:build:
468   extends:
469     - .variables:default
470     - .gromacs:base:build
471     - .use-clang:base
472     - .use-ccache
473     - .rules:merge-requests
474   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
475   tags:
476     - k8s-scilifelab
477   needs:
478     - job: gromacs:clang-ASAN:configure
479
480 gromacs:clang-UBSAN:build:
481   extends:
482     - .variables:default
483     - .gromacs:base:build
484     - .use-clang:base
485     - .use-ccache
486     - .rules:merge-requests
487   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
488   tags:
489     - k8s-scilifelab
490   needs:
491     - job: gromacs:clang-UBSAN:configure
492
493 gromacs:clang-static-analyzer:build:
494   extends:
495     - .variables:default
496     - .gromacs:static-analyzer-build
497     - .use-clang:base
498     - .use-ccache
499     - .rules:merge-requests
500   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
501   tags:
502     - k8s-scilifelab
503   needs:
504     - job: gromacs:clang-static-analyzer:configure
505
506 gromacs:clang-8:build:
507   extends:
508     - .variables:default
509     - .gromacs:base:build
510     - .before_script:default
511     - .use-ccache
512     - .rules:merge-requests
513   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
514   needs:
515     - job: gromacs:clang-8:configure
516
517 gromacs:oneapi-2021.1-beta08-opencl:build:
518   extends:
519     - .variables:default
520     - .gromacs:base:build
521     - .use-ccache
522     - .before_script:default
523     - .rules:merge-requests
524   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
525   needs:
526     - job: gromacs:oneapi-2021.1-beta08-opencl:configure
527   before_script:
528     # Necessary to override gitlab default 'set -e' which breaks Intel's
529     # setvar.sh script
530     - set +e
531     - source /opt/intel/oneapi/setvars.sh
532
533 gromacs:clang-9-mpi:build:
534   extends:
535     - .variables:default
536     - .gromacs:base:build
537     - .before_script:default
538     - .use-ccache
539     - .rules:merge-requests
540   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
541   needs:
542     - job: gromacs:clang-9-mpi:configure
543
544 gromacs:gcc-8-cuda-11.0:release:build:
545   extends:
546     - .variables:default  
547     - .gromacs:base:build
548     - .before_script:default
549     - .use-ccache
550     - .rules:nightly-only-for-release
551   stage: release-build
552   variables:
553     BUILD_DIR: release-builds-gcc
554   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
555   needs:
556     - job: gromacs:gcc-8-cuda-11.0:release:configure
557
558 gromacs:gcc-7:release:build:
559   extends:
560     - .variables:default
561     - .gromacs:base:build
562     - .before_script:default
563     - .use-ccache
564     - .rules:nightly-only-for-release
565   stage: release-build
566   variables:
567     BUILD_DIR: release-builds-gcc
568   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
569   needs:
570     - job: gromacs:gcc-7:release:configure
571
572 gromacs:clang-9:release:build:
573   extends:
574     - .variables:default
575     - .gromacs:base:build
576     - .before_script:default
577     - .use-ccache
578     - .rules:nightly-only-for-release
579   stage: release-build
580   variables:
581     BUILD_DIR: release-builds-clang
582   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
583   needs:
584     - job: gromacs:clang-9:release:configure
585
586 gromacs:clang-8-cuda-10.1:release:build:
587   extends:
588     - .variables:default
589     - .gromacs:base:build
590     - .before_script:default
591     - .use-ccache
592     - .rules:nightly-only-for-release
593   stage: release-build
594   variables:
595     BUILD_DIR: release-builds-clang
596   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
597   needs:
598     - job: gromacs:clang-8-cuda-10.1:release:configure
599
600 gromacs:oneapi-2021.1-beta08-opencl:release:build:
601   extends:
602     - .variables:default
603     - .gromacs:base:build
604     - .use-oneapi:base
605     - .use-opencl
606     - .before_script:default
607     - .use-ccache
608     - .rules:nightly-only-for-release
609   stage: release-build
610   variables:
611     BUILD_DIR: release-builds-oneapi
612     COMPILER_MAJOR_VERSION: 2021
613   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
614   needs:
615     - job: gromacs:oneapi-2021.1-beta08-opencl:release:configure
616   before_script:
617     # Necessary to override gitlab default 'set -e' which breaks Intel's
618     # setvar.sh script
619     - set +e
620     - source /opt/intel/oneapi/setvars.sh
621
622 # Jobs running during test stage
623
624 .gromacs:base:test:
625   extends:
626     - .variables:default
627   stage: test
628   cache: {}
629   retry:
630     max: 1
631   variables:
632     CTEST_RUN_MODE: "ExperimentalTest"
633   script:
634     - cd $BUILD_DIR
635     - export UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1:suppressions=$CI_PROJECT_DIR/admin/ubsan-suppressions.txt
636     # Needed to run MPI enabled code in the docker images, until we set up different users
637     - export OMPI_ALLOW_RUN_AS_ROOT=1
638     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
639     - export ASAN_OPTIONS="check_initialization_order=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true:detect_stack_use_after_return=true"
640     - ctest -D $CTEST_RUN_MODE --output-on-failure | tee ctestLog.log || true
641     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
642       ctestLog.log | tee ctestErrors.log
643     - xsltproc $CI_PROJECT_DIR/scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/*.xml > JUnitTestResults.xml
644     - if [ -s ctestErrors.log ] ; then
645       echo "Error during running ctest";
646       exit 1;
647       fi
648     - cd ..
649   artifacts:
650     reports:
651       junit: $BUILD_DIR/JUnitTestResults.xml
652     paths:
653       - $BUILD_DIR/Testing
654       - $BUILD_DIR/tests
655     when: always
656     expire_in: 1 week
657
658 .gromacs:base:regressiontest:
659   extends:
660     - .variables:default
661   variables:
662     KUBERNETES_CPU_LIMIT: 4
663     KUBERNETES_CPU_REQUEST: 4
664     KUBERNETES_MEMORY_REQUEST: 4Gi
665     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
666     REGRESSIONTEST_OMP_RANK_NUMBER: 2
667     REGRESSIONTEST_PME_RANK_NUMBER: 1
668     REGRESSIONTEST_MPI_RUN_COMMAND: ""
669     REGRESSIONTEST_DOUBLE: ""
670     REGRESSIONTEST_PARALLEL: "-nt"
671   stage: test
672   cache: {}
673   retry:
674     max: 1
675   script:
676     - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
677     - export ASAN_OPTIONS="check_initialization_order=1:detect_invalid_pointer_pairs=1:strict_init_order=true:strict_string_checks=true:detect_stack_use_after_return=true"
678     # Needed to run MPI enabled code in the docker images, until we set up different users
679     - export OMPI_ALLOW_RUN_AS_ROOT=1
680     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
681     - tar xzf gmx-regressiontests.tar.gz
682     - source $INSTALL_DIR/bin/GMXRC
683     - cd regressiontests
684     - perl gmxtest.pl $REGRESSIONTEST_PARALLEL $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all
685   artifacts:
686     paths:
687       - regressiontests/gmxtest.xml
688     when: always
689     expire_in: 1 week
690
691 gromacs:gcc-7:test:
692   extends:
693     - .gromacs:base:test
694     - .rules:merge-requests
695   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
696   variables:
697     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
698     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
699   tags:
700     - k8s-scilifelab
701   needs:
702     - job: gromacs:gcc-7:build
703
704 gromacs:gcc-8-cuda-11.0:test:
705   extends:
706     - .gromacs:base:test
707     - .rules:merge-requests
708   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
709   variables:
710     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
711     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
712   tags:
713     - k8s-scilifelab
714   needs:
715     - job: gromacs:gcc-8-cuda-11.0:build
716
717 gromacs:clang-8:test:
718   extends:
719     - .gromacs:base:test
720     - .rules:merge-requests
721   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
722   needs:
723     - job: gromacs:clang-8:build
724
725 gromacs:clang-TSAN:test:
726   extends:
727     - .gromacs:base:test
728     - .rules:merge-requests
729   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
730   needs:
731     - job: gromacs:clang-TSAN:build
732
733 gromacs:clang-ASAN:test:
734   extends:
735     - .gromacs:base:test
736     - .use-clang:base
737     - .rules:merge-requests
738   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
739   variables:
740     CTEST_RUN_MODE: "ExperimentalMemCheck"
741   tags:
742     - k8s-scilifelab
743   needs:
744     - job: gromacs:clang-ASAN:build
745
746 gromacs:clang-UBSAN:test:
747   extends:
748     - .gromacs:base:test
749     - .use-clang:base
750     - .rules:merge-requests
751   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
752   tags:
753     - k8s-scilifelab
754   needs:
755     - job: gromacs:clang-UBSAN:build
756
757 gromacs:oneapi-2021.1-beta08-opencl:test:
758   extends:
759     - .gromacs:base:test
760     - .rules:merge-requests
761   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
762   needs:
763     - job: gromacs:oneapi-2021.1-beta08-opencl:build
764   before_script:
765     # Necessary to override gitlab default 'set -e' which breaks Intel's
766     # setvar.sh script
767     - set +e
768     - source /opt/intel/oneapi/setvars.sh
769
770 gromacs:clang-9-mpi:test:
771   extends:
772     - .gromacs:base:test
773     - .rules:merge-requests
774   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
775   tags:
776     - k8s-scilifelab
777   needs:
778     - job: gromacs:clang-9-mpi:build
779
780 gromacs:gcc-7:regressiontest:
781   extends:
782     - .gromacs:base:regressiontest
783     - .rules:merge-requests
784   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
785   variables:
786     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
787     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
788     REGRESSIONTEST_PME_RANK_NUMBER: 0
789     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
790     REGRESSIONTEST_OMP_RANK_NUMBER: 1
791   tags:
792     - k8s-scilifelab
793   needs:
794     - job: gromacs:gcc-7:build
795     - job: regressiontests:prepare
796
797 gromacs:gcc-8-cuda-11.0:regressiontest:
798   extends:
799     - .gromacs:base:regressiontest
800     - .rules:merge-requests
801   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
802   variables:
803     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
804     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
805     REGRESSIONTEST_PME_RANK_NUMBER: 0
806     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
807     REGRESSIONTEST_OMP_RANK_NUMBER: 1
808   tags:
809     - k8s-scilifelab
810   needs:
811     - job: gromacs:gcc-8-cuda-11.0:build
812     - job: regressiontests:prepare
813
814 gromacs:clang-8:regressiontest:
815   extends:
816     - .gromacs:base:regressiontest
817     - .rules:merge-requests
818   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
819   tags:
820     - k8s-scilifelab
821   needs:
822     - job: gromacs:clang-8:build
823     - job: regressiontests:prepare
824
825 gromacs:clang-TSAN:regressiontest:
826   extends:
827     - .gromacs:base:regressiontest
828     - .rules:merge-requests
829   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
830   tags:
831     - k8s-scilifelab
832   needs:
833     - job: gromacs:clang-TSAN:build
834     - job: regressiontests:prepare
835
836 gromacs:clang-ASAN:regressiontest:
837   extends:
838     - .gromacs:base:regressiontest
839     - .use-clang:base
840     - .rules:merge-requests
841   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
842   tags:
843     - k8s-scilifelab
844   needs:
845     - job: gromacs:clang-ASAN:build
846     - job: regressiontests:prepare
847
848 gromacs:clang-9:regressiontest:
849   extends:
850     - .gromacs:base:regressiontest
851     - .rules:merge-requests
852   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
853   variables:
854     REGRESSIONTEST_DOUBLE: "-double"
855     REGRESSIONTEST_PARALLEL: "-np"
856   tags:
857     - k8s-scilifelab
858   needs:
859     - job: gromacs:clang-9-mpi:build
860     - job: regressiontests:prepare
861
862 gromacs:oneapi-2021.1-beta08-opencl:regressiontest:
863   extends:
864     - .gromacs:base:regressiontest
865     - .rules:merge-requests
866   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
867   needs:
868     - job: gromacs:oneapi-2021.1-beta08-opencl:build
869     - job: regressiontests:prepare
870   before_script:
871     # Necessary to override gitlab default 'set -e' which breaks Intel's
872     # setvar.sh script
873     - set +e
874     - source /opt/intel/oneapi/setvars.sh
875
876 gromacs:gcc-8-cuda-11.0:release:test:
877   extends:
878     - .gromacs:base:test
879     - .rules:nightly-only-for-release
880   stage: release-tests
881   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
882   variables:
883     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
884     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
885     BUILD_DIR: release-builds-gcc
886   tags:
887     - k8s-scilifelab
888   needs:
889     - job: gromacs:gcc-8-cuda-11.0:release:configure
890     - job: gromacs:gcc-8-cuda-11.0:release:build
891
892 gromacs:gcc-7:release:test:
893   extends:
894     - .gromacs:base:test
895     - .rules:nightly-only-for-release
896   stage: release-tests
897   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
898   variables:
899     BUILD_DIR: release-builds-gcc
900   needs:
901     - job: gromacs:gcc-7:release:configure
902     - job: gromacs:gcc-7:release:build
903
904 gromacs:clang-9:release:test:
905   extends:
906     - .gromacs:base:test
907     - .rules:nightly-only-for-release
908   stage: release-tests
909   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
910   variables:
911     BUILD_DIR: release-builds-clang
912   needs:
913     - job: gromacs:clang-9:release:configure
914     - job: gromacs:clang-9:release:build
915
916 gromacs:clang-8-cuda-10.1:release:test:
917   extends:
918     - .gromacs:base:test
919     - .rules:nightly-only-for-release
920   stage: release-tests
921   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
922   variables:
923     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
924     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
925     BUILD_DIR: release-builds-clang
926   tags:
927     - k8s-scilifelab
928   needs:
929     - job: gromacs:clang-8-cuda-10.1:release:configure
930     - job: gromacs:clang-8-cuda-10.1:release:build
931
932 gromacs:oneapi-2021.1-beta08-opencl:release:test:
933   extends:
934     - .gromacs:base:test
935     - .rules:nightly-only-for-release
936   stage: release-tests
937   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
938   variables:
939     BUILD_DIR: release-builds-oneapi
940   needs:
941     - job: gromacs:oneapi-2021.1-beta08-opencl:release:configure
942     - job: gromacs:oneapi-2021.1-beta08-opencl:release:build
943   before_script:
944     # Necessary to override gitlab default 'set -e' which breaks Intel's
945     # setvar.sh script
946     - set +e
947     - source /opt/intel/oneapi/setvars.sh
948
949 gromacs:gcc-7:release:regressiontest:
950   extends:
951     - .gromacs:base:regressiontest
952     - .rules:nightly-only-for-release
953   stage: release-tests
954   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
955   variables:
956     BUILD_DIR: release-builds-gcc
957   tags:
958     - k8s-scilifelab
959   needs:
960     - job: gromacs:gcc-7:release:build
961     - job: regressiontests:package
962
963 gromacs:clang-9:release:regressiontest:
964   extends:
965     - .gromacs:base:regressiontest
966     - .rules:nightly-only-for-release
967   stage: release-tests
968   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
969   variables:
970     BUILD_DIR: release-builds-clang
971     REGRESSIONTEST_DOUBLE: "-double"
972     REGRESSIONTEST_PARALLEL: "-np"
973   tags:
974     - k8s-scilifelab
975   needs:
976     - job: gromacs:clang-9:release:build
977     - job: regressiontests:package
978
979 gromacs:clang-8-cuda-10.1:release:regressiontest:
980   extends:
981     - .gromacs:base:regressiontest
982     - .rules:nightly-only-for-release
983   stage: release-tests
984   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
985   variables:
986     BUILD_DIR: release-builds-clang
987     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
988     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
989     REGRESSIONTEST_PME_RANK_NUMBER: 0
990     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
991     REGRESSIONTEST_OMP_RANK_NUMBER: 1
992   tags:
993     - k8s-scilifelab
994   needs:
995     - job: gromacs:clang-8-cuda-10.1:release:build
996     - job: regressiontests:package
997
998 gromacs:oneapi-2021.1-beta08-opencl:release:regressiontest:
999   extends:
1000     - .gromacs:base:regressiontest
1001     - .rules:nightly-only-for-release
1002   stage: release-tests
1003   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
1004   variables:
1005     BUILD_DIR: release-builds-oneapi
1006     REGRESSIONTEST_PME_RANK_NUMBER: 0
1007     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
1008     REGRESSIONTEST_OMP_RANK_NUMBER: 1
1009   needs:
1010     - job: gromacs:oneapi-2021.1-beta08-opencl:release:build
1011     - job: regressiontests:package
1012   before_script:
1013     # Necessary to override gitlab default 'set -e' which breaks Intel's
1014     # setvar.sh script
1015     - set +e
1016     - source /opt/intel/oneapi/setvars.sh