Avoid builds with RelWithDebInfo
[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-10.1: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-10.1-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:clang-UBSAN:configure:
294   extends:
295     - .gromacs:base:configure
296     - .use-clang:base
297     - .rules:merge-requests
298   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
299   variables:
300     COMPILER_MAJOR_VERSION: 8
301     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=UBSAN"
302
303 gromacs:gcc-8-cuda-10.1:release:configure:
304   extends:
305     - .gromacs:base:release:configure
306     - .use-gcc:base
307     - .use-mpi
308     - .use-cuda
309     - .rules:nightly-only-for-release
310   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi-master
311   variables:
312     COMPILER_MAJOR_VERSION: 8
313     RELEASE_BUILD_DIR: release-builds-gcc
314     CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_MDRUN_ONLY=ON"
315     CMAKE_BUILD_TYPE_OPTIONS : "-DCMAKE_BUILD_TYPE=RelWithAssert"
316     CMAKE_REGRESSIONTEST_OPTIONS: ""
317   dependencies:
318     - archive:package
319     - regressiontests:package
320     - prepare-release-version
321
322 gromacs:gcc-7:release:configure:
323   extends:
324     - .gromacs:base:release:configure
325     - .use-gcc:base
326     - .rules:nightly-only-for-release
327   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
328   variables:
329     COMPILER_MAJOR_VERSION: 7
330     RELEASE_BUILD_DIR: release-builds-gcc
331     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
332   dependencies:
333     - archive:package
334     - regressiontests:package
335     - prepare-release-version
336
337 gromacs:clang-9:release:configure:
338   extends:
339     - .gromacs:base:release:configure
340     - .use-clang:base
341     - .use-mpi
342     - .rules:nightly-only-for-release
343   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
344   variables:
345     COMPILER_MAJOR_VERSION: 9
346     RELEASE_BUILD_DIR: release-builds-clang
347     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
348     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
349   dependencies:
350     - archive:package
351     - regressiontests:package
352     - prepare-release-version
353
354 gromacs:clang-8-cuda-10.1:release:configure:
355   extends:
356     - .gromacs:base:release:configure
357     - .use-clang:base
358     - .use-cuda
359     - .rules:nightly-only-for-release
360   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
361   variables:
362     COMPILER_MAJOR_VERSION: 8
363     RELEASE_BUILD_DIR: release-builds-clang
364     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
365
366 # Jobs running during build stage
367
368 .gromacs:base:build:
369   stage: build
370   script:
371     - cd $BUILD_DIR
372     - cmake --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
373     - cmake --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
374     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
375       | grep -v "CMake" | tee buildErrors.log || true
376     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
377     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
378     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
379     - cd ..
380   artifacts:
381     when: always
382     paths:
383       - $BUILD_DIR
384       - $INSTALL_DIR/
385
386 .gromacs:static-analyzer-build:
387   stage: build
388   script:
389     - cd $BUILD_DIR
390     - scan-build -o scan_html cmake --build . -- -j8 2>&1 | tee buildLogFile.log
391     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
392       | grep -v "CMake" | tee buildErrors.log || true
393     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
394     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
395     - cd ..
396   artifacts:
397     when: always
398     paths:
399       - $BUILD_DIR/scan_html
400
401 gromacs:gcc-7:build:
402   extends:
403     - .variables:default
404     - .gromacs:base:build
405     - .before_script:default
406     - .use-ccache
407     - .rules:merge-requests
408   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
409   needs:
410     - job: gromacs:gcc-7:configure
411       artifacts: true
412
413 gromacs:gcc-8-cuda-10.1:build:
414   extends:
415     - .variables:default
416     - .gromacs:base:build
417     - .before_script:default
418     - .use-ccache
419     - .rules:merge-requests
420   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi-master
421   needs:
422     - job: gromacs:gcc-8-cuda-10.1:configure
423
424 gromacs:clang-TSAN:build:
425   extends:
426     - .variables:default
427     - .gromacs:base:build
428     - .use-clang:base
429     - .use-ccache
430     - .rules:merge-requests
431   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
432   needs:
433     - job: gromacs:clang-TSAN:configure
434
435 gromacs:clang-ASAN:build:
436   extends:
437     - .variables:default
438     - .gromacs:base:build
439     - .use-clang:base
440     - .use-ccache
441     - .rules:merge-requests
442   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
443   tags:
444     - k8s-scilifelab
445   needs:
446     - job: gromacs:clang-ASAN:configure
447
448 gromacs:clang-UBSAN:build:
449   extends:
450     - .variables:default
451     - .gromacs:base:build
452     - .use-clang:base
453     - .use-ccache
454     - .rules:merge-requests
455   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
456   tags:
457     - k8s-scilifelab
458   needs:
459     - job: gromacs:clang-UBSAN:configure
460
461 gromacs:clang-static-analyzer:build:
462   extends:
463     - .variables:default
464     - .gromacs:static-analyzer-build
465     - .use-clang:base
466     - .use-ccache
467     - .rules:merge-requests
468   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
469   tags:
470     - k8s-scilifelab
471   needs:
472     - job: gromacs:clang-static-analyzer:configure
473
474 gromacs:clang-8:build:
475   extends:
476     - .variables:default
477     - .gromacs:base:build
478     - .before_script:default
479     - .use-ccache
480     - .rules:merge-requests
481   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
482   needs:
483     - job: gromacs:clang-8:configure
484
485 gromacs:clang-9-mpi:build:
486   extends:
487     - .variables:default
488     - .gromacs:base:build
489     - .before_script:default
490     - .use-ccache
491     - .rules:merge-requests
492   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
493   needs:
494     - job: gromacs:clang-9-mpi:configure
495
496 gromacs:gcc-8-cuda-10.1:release:build:
497   extends:
498     - .variables:default  
499     - .gromacs:base:build
500     - .before_script:default
501     - .use-ccache
502     - .rules:nightly-only-for-release
503   stage: release-build
504   variables:
505     BUILD_DIR: release-builds-gcc
506   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi-master
507   needs:
508     - job: gromacs:gcc-8-cuda-10.1:release:configure
509
510 gromacs:gcc-7:release:build:
511   extends:
512     - .variables:default
513     - .gromacs:base:build
514     - .before_script:default
515     - .use-ccache
516     - .rules:nightly-only-for-release
517   stage: release-build
518   variables:
519     BUILD_DIR: release-builds-gcc
520   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
521   needs:
522     - job: gromacs:gcc-7:release:configure
523
524 gromacs:clang-9:release:build:
525   extends:
526     - .variables:default
527     - .gromacs:base:build
528     - .before_script:default
529     - .use-ccache
530     - .rules:nightly-only-for-release
531   stage: release-build
532   variables:
533     BUILD_DIR: release-builds-clang
534   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
535   needs:
536     - job: gromacs:clang-9:release:configure
537
538 gromacs:clang-8-cuda-10.1:release:build:
539   extends:
540     - .variables:default
541     - .gromacs:base:build
542     - .before_script:default
543     - .use-ccache
544     - .rules:nightly-only-for-release
545   stage: release-build
546   variables:
547     BUILD_DIR: release-builds-clang
548   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
549   needs:
550     - job: gromacs:clang-8-cuda-10.1:release:configure
551
552 # Jobs running during test stage
553
554 .gromacs:base:test:
555   extends:
556     - .variables:default
557   stage: test
558   cache: {}
559   retry:
560     max: 1
561   variables:
562     CTEST_RUN_MODE: "ExperimentalTest"
563   script:
564     - cd $BUILD_DIR
565     - export UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1:suppressions=$CI_PROJECT_DIR/admin/ubsan-suppressions.txt
566     # Needed to run MPI enabled code in the docker images, until we set up different users
567     - export OMPI_ALLOW_RUN_AS_ROOT=1
568     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
569     - 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"
570     - ctest -D $CTEST_RUN_MODE --output-on-failure | tee ctestLog.log || true
571     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
572       ctestLog.log | tee ctestErrors.log
573     - xsltproc $CI_PROJECT_DIR/scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/*.xml > JUnitTestResults.xml
574     - if [ -s ctestErrors.log ] ; then
575       echo "Error during running ctest";
576       exit 1;
577       fi
578     - cd ..
579   artifacts:
580     reports:
581       junit: $BUILD_DIR/JUnitTestResults.xml
582     paths:
583       - $BUILD_DIR/Testing
584       - $BUILD_DIR/tests
585     when: always
586     expire_in: 1 week
587
588 .gromacs:base:regressiontest:
589   extends:
590     - .variables:default
591   variables:
592     KUBERNETES_CPU_LIMIT: 4
593     KUBERNETES_CPU_REQUEST: 4
594     KUBERNETES_MEMORY_REQUEST: 4Gi
595     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
596     REGRESSIONTEST_OMP_RANK_NUMBER: 2
597     REGRESSIONTEST_PME_RANK_NUMBER: 1
598     REGRESSIONTEST_MPI_RUN_COMMAND: ""
599     REGRESSIONTEST_DOUBLE: ""
600     REGRESSIONTEST_PARALLEL: "-nt"
601   stage: test
602   cache: {}
603   retry:
604     max: 1
605   script:
606     - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
607     - 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"
608     # Needed to run MPI enabled code in the docker images, until we set up different users
609     - export OMPI_ALLOW_RUN_AS_ROOT=1
610     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
611     - tar xzf gmx-regressiontests.tar.gz
612     - source $INSTALL_DIR/bin/GMXRC
613     - cd regressiontests
614     - 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
615   artifacts:
616     paths:
617       - regressiontests/gmxtest.xml
618     when: always
619     expire_in: 1 week
620
621 gromacs:gcc-7:test:
622   extends:
623     - .gromacs:base:test
624     - .rules:merge-requests
625   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
626   variables:
627     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
628     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
629   tags:
630     - k8s-scilifelab
631   needs:
632     - job: gromacs:gcc-7:build
633
634 gromacs:gcc-8-cuda-10.1:test:
635   extends:
636     - .gromacs:base:test
637     - .rules:merge-requests
638   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi-master
639   variables:
640     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
641     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
642   tags:
643     - k8s-scilifelab
644   needs:
645     - job: gromacs:gcc-8-cuda-10.1:build
646
647 gromacs:clang-8:test:
648   extends:
649     - .gromacs:base:test
650     - .rules:merge-requests
651   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
652   needs:
653     - job: gromacs:clang-8:build
654
655 gromacs:clang-TSAN:test:
656   extends:
657     - .gromacs:base:test
658     - .rules:merge-requests
659   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
660   needs:
661     - job: gromacs:clang-TSAN:build
662
663 gromacs:clang-ASAN:test:
664   extends:
665     - .gromacs:base:test
666     - .use-clang:base
667     - .rules:merge-requests
668   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
669   variables:
670     CTEST_RUN_MODE: "ExperimentalMemCheck"
671   tags:
672     - k8s-scilifelab
673   needs:
674     - job: gromacs:clang-ASAN:build
675
676 gromacs:clang-UBSAN:test:
677   extends:
678     - .gromacs:base:test
679     - .use-clang:base
680     - .rules:merge-requests
681   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
682   tags:
683     - k8s-scilifelab
684   needs:
685     - job: gromacs:clang-UBSAN:build
686
687 gromacs:clang-9-mpi:test:
688   extends:
689     - .gromacs:base:test
690     - .rules:merge-requests
691   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
692   tags:
693     - k8s-scilifelab
694   needs:
695     - job: gromacs:clang-9-mpi:build
696
697 gromacs:gcc-7:regressiontest:
698   extends:
699     - .gromacs:base:regressiontest
700     - .rules:merge-requests
701   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
702   variables:
703     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
704     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
705     REGRESSIONTEST_PME_RANK_NUMBER: 0
706     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
707     REGRESSIONTEST_OMP_RANK_NUMBER: 1
708   tags:
709     - k8s-scilifelab
710   needs:
711     - job: gromacs:gcc-7:build
712     - job: regressiontests:prepare
713
714 gromacs:gcc-8-cuda-10.1:regressiontest:
715   extends:
716     - .gromacs:base:regressiontest
717     - .rules:merge-requests
718   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi-master
719   variables:
720     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
721     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
722     REGRESSIONTEST_PME_RANK_NUMBER: 0
723     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
724     REGRESSIONTEST_OMP_RANK_NUMBER: 1
725   tags:
726     - k8s-scilifelab
727   needs:
728     - job: gromacs:gcc-8-cuda-10.1:build
729     - job: regressiontests:prepare
730
731 gromacs:clang-8:regressiontest:
732   extends:
733     - .gromacs:base:regressiontest
734     - .rules:merge-requests
735   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
736   tags:
737     - k8s-scilifelab
738   needs:
739     - job: gromacs:clang-8:build
740     - job: regressiontests:prepare
741
742 gromacs:clang-TSAN:regressiontest:
743   extends:
744     - .gromacs:base:regressiontest
745     - .rules:merge-requests
746   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
747   tags:
748     - k8s-scilifelab
749   needs:
750     - job: gromacs:clang-TSAN:build
751     - job: regressiontests:prepare
752
753 gromacs:clang-ASAN:regressiontest:
754   extends:
755     - .gromacs:base:regressiontest
756     - .use-clang:base
757     - .rules:merge-requests
758   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
759   tags:
760     - k8s-scilifelab
761   needs:
762     - job: gromacs:clang-ASAN:build
763     - job: regressiontests:prepare
764
765 gromacs:clang-9:regressiontest:
766   extends:
767     - .gromacs:base:regressiontest
768     - .rules:merge-requests
769   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
770   variables:
771     REGRESSIONTEST_DOUBLE: "-double"
772     REGRESSIONTEST_PARALLEL: "-np"
773   tags:
774     - k8s-scilifelab
775   needs:
776     - job: gromacs:clang-9-mpi:build
777     - job: regressiontests:prepare
778
779 gromacs:gcc-8-cuda-10.1:release:test:
780   extends:
781     - .gromacs:base:test
782     - .rules:nightly-only-for-release
783   stage: release-tests
784   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi-master
785   variables:
786     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
787     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
788     BUILD_DIR: release-builds-gcc
789   tags:
790     - k8s-scilifelab
791   needs:
792     - job: gromacs:gcc-8-cuda-10.1:release:configure
793     - job: gromacs:gcc-8-cuda-10.1:release:build
794
795 gromacs:gcc-7:release:test:
796   extends:
797     - .gromacs:base:test
798     - .rules:nightly-only-for-release
799   stage: release-tests
800   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
801   variables:
802     BUILD_DIR: release-builds-gcc
803   needs:
804     - job: gromacs:gcc-7:release:configure
805     - job: gromacs:gcc-7:release:build
806
807 gromacs:clang-9:release:test:
808   extends:
809     - .gromacs:base:test
810     - .rules:nightly-only-for-release
811   stage: release-tests
812   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
813   variables:
814     BUILD_DIR: release-builds-clang
815   needs:
816     - job: gromacs:clang-9:release:configure
817     - job: gromacs:clang-9:release:build
818
819 gromacs:clang-8-cuda-10.1:release:test:
820   extends:
821     - .gromacs:base:test
822     - .rules:nightly-only-for-release
823   stage: release-tests
824   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
825   variables:
826     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
827     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
828     BUILD_DIR: release-builds-clang
829   tags:
830     - k8s-scilifelab
831   needs:
832     - job: gromacs:clang-8-cuda-10.1:release:configure
833     - job: gromacs:clang-8-cuda-10.1:release:build
834
835 gromacs:gcc-7:release:regressiontest:
836   extends:
837     - .gromacs:base:regressiontest
838     - .rules:nightly-only-for-release
839   stage: release-tests
840   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
841   variables:
842     BUILD_DIR: release-builds-gcc
843   tags:
844     - k8s-scilifelab
845   needs:
846     - job: gromacs:gcc-7:release:build
847     - job: regressiontests:package
848
849 gromacs:clang-9:release:regressiontest:
850   extends:
851     - .gromacs:base:regressiontest
852     - .rules:nightly-only-for-release
853   stage: release-tests
854   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
855   variables:
856     BUILD_DIR: release-builds-clang
857     REGRESSIONTEST_DOUBLE: "-double"
858     REGRESSIONTEST_PARALLEL: "-np"
859   tags:
860     - k8s-scilifelab
861   needs:
862     - job: gromacs:clang-9:release:build
863     - job: regressiontests:package
864
865 gromacs:clang-8-cuda-10.1:release:regressiontest:
866   extends:
867     - .gromacs:base:regressiontest
868     - .rules:nightly-only-for-release
869   stage: release-tests
870   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
871   variables:
872     BUILD_DIR: release-builds-clang
873     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
874     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
875     REGRESSIONTEST_PME_RANK_NUMBER: 0
876     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
877     REGRESSIONTEST_OMP_RANK_NUMBER: 1
878   tags:
879     - k8s-scilifelab
880   needs:
881     - job: gromacs:clang-8-cuda-10.1:release:build
882     - job: regressiontests:package
883