Use GPU resources for build types again
[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   tags: []
13   variables:
14     KUBERNETES_CPU_LIMIT: 8
15     KUBERNETES_CPU_REQUEST: 4
16     KUBERNETES_MEMORY_LIMIT: 8Gi
17     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
18     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
19     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
20     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
21     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
22     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
23     COMPILER_MAJOR_VERSION: 9
24     BUILD_DIR: simple-build
25   script:
26     - echo $CMAKE_COMPILER_SCRIPT
27     - echo $CMAKE_EXTRA_OPTIONS
28     - echo $CMAKE_SIMD_OPTIONS
29     - echo $CMAKE_GPU_OPTIONS
30     - echo $CMAKE_MPI_OPTIONS
31     - echo $CMAKE_PRECISION_OPTIONS
32     - echo $CMAKE_BUILD_TYPE_OPTIONS
33     - echo $CMAKE_GMXAPI_OPTIONS
34     - if [[ -d $BUILD_DIR ]] ; then
35       echo "Cleaning up build directory" ;
36       rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
37       else
38       echo "Preparing new build directory" ;
39       mkdir $BUILD_DIR ;
40       fi
41     - cd $BUILD_DIR
42     - cmake ..
43       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
44       $CMAKE_COMPILER_SCRIPT
45       $CMAKE_EXTRA_OPTIONS
46       $CMAKE_SIMD_OPTIONS
47       $CMAKE_MPI_OPTIONS
48       $CMAKE_PRECISION_OPTIONS
49       $CMAKE_BUILD_TYPE_OPTIONS
50       $CMAKE_GPU_OPTIONS
51       $CMAKE_GMXAPI_OPTIONS
52       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
53       2>&1 | tee cmakeLog.log
54     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
55     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
56     - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
57     - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
58     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
59       | grep -v "CMake" | tee buildErrors.log || true
60     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
61     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
62     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
63     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
64     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
65       ctestLog.log | tee ctestErrors.log
66     - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
67     - if [ -s ctestErrors.log ] ; then
68       echo "Error during running ctest";
69       exit 1;
70       fi
71     - cd ..
72   artifacts:
73     reports:
74       junit: $BUILD_DIR/JUnitTestResults.xml
75     paths:
76       - $BUILD_DIR/*log
77     when: always
78     expire_in: 1 week
79
80 # Jobs running in first pre-build stage
81
82 .gromacs:base:configure:
83   extends:
84     - .variables:default
85   stage: configure-build
86   cache: {}
87   variables:
88     KUBERNETES_CPU_LIMIT: 1
89     KUBERNETES_CPU_REQUEST: 1
90     KUBERNETES_MEMORY_LIMIT: 2Gi
91     CMAKE_COMPILER_SCRIPT: ""
92     CMAKE_EXTRA_OPTIONS: ""
93     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
94     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
95     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
96     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
97     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
98   script:
99     - echo $CMAKE_COMPILER_SCRIPT
100     - echo $CMAKE_EXTRA_OPTIONS
101     - echo $CMAKE_SIMD_OPTIONS
102     - echo $CMAKE_GPU_OPTIONS
103     - echo $CMAKE_MPI_OPTIONS
104     - echo $CMAKE_PRECISION_OPTIONS
105     - echo $CMAKE_BUILD_TYPE_OPTIONS
106     - echo $CMAKE_GMXAPI_OPTIONS
107     - if [[ -d $BUILD_DIR ]] ; then
108       rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
109       else
110       echo "Preparing new build directory" ;
111       mkdir $BUILD_DIR ;
112       fi
113     - cd $BUILD_DIR
114     - cmake ..
115       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
116       $CMAKE_COMPILER_SCRIPT
117       $CMAKE_EXTRA_OPTIONS
118       $CMAKE_SIMD_OPTIONS
119       $CMAKE_MPI_OPTIONS
120       $CMAKE_PRECISION_OPTIONS
121       $CMAKE_BUILD_TYPE_OPTIONS
122       $CMAKE_GPU_OPTIONS
123       $CMAKE_GMXAPI_OPTIONS
124       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
125       2>&1 | tee cmakeLog.log
126     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
127     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
128     - cd ..
129   artifacts:
130     when: always
131     paths:
132       - $BUILD_DIR
133
134 .gromacs:base:release:configure:
135   extends:
136     - .variables:default
137   stage: release-configure
138   cache: {}
139   variables:
140     KUBERNETES_CPU_LIMIT: 1
141     KUBERNETES_CPU_REQUEST: 1
142     KUBERNETES_MEMORY_LIMIT: 2Gi
143     CMAKE_COMPILER_SCRIPT: ""
144     CMAKE_EXTRA_OPTIONS: ""
145     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
146     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
147     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
148     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
149     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
150     CMAKE_REGRESSIONTEST_OPTIONS: "-DREGRESSIONTEST_PATH=../\\$RELEASE_REGRESSIONTESTS"
151     RELEASE_BUILD_DIR: release-builds
152     RELEASE_SOURCE: release-source-from-tarball
153     RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
154   script:
155     - VERSION=`cat version.json |
156       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
157     - if [[ $GROMACS_RELEASE != "true" ]] ; then
158       VERSION=$VERSION-dev ;
159       fi
160     - SOURCENAME=gromacs-$VERSION
161     - SOURCETARBALL=$SOURCENAME.tar.gz
162     - REGTESTNAME=regressiontests-$VERSION
163     - REGTESTTARBALL=$REGTESTNAME.tar.gz
164     - echo "$SOURCETARBALL"
165     - echo "$REGTESTTARBALL"
166     - RELEASE_TARBALLS=release-tarballs
167     - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
168     - mv $SOURCETARBALL $RELEASE_TARBALLS
169     - mv $REGTESTTARBALL $RELEASE_TARBALLS
170     - cd $RELEASE_TARBALLS
171     # We rename the source and regressiontest directories
172     # to have names for them that don't change for different versions.
173     - tar -xf $SOURCETARBALL
174     - mv $SOURCENAME ../$RELEASE_SOURCE
175     - tar -xf $REGTESTTARBALL
176     - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
177     - rm $SOURCETARBALL $REGTESTTARBALL
178     - cd ..
179     - echo $CMAKE_COMPILER_SCRIPT
180     - echo $CMAKE_EXTRA_OPTIONS
181     - echo $CMAKE_SIMD_OPTIONS
182     - echo $CMAKE_GPU_OPTIONS
183     - echo $CMAKE_MPI_OPTIONS
184     - echo $CMAKE_PRECISION_OPTIONS
185     - echo $CMAKE_BUILD_TYPE_OPTIONS
186     - echo $CMAKE_GMXAPI_OPTIONS
187     - if [[ -d $RELEASE_BUILD_DIR ]] ; then
188       echo "Cleaning up build directory" ;
189       rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
190       else
191       echo "Preparing new build directory" ;
192       mkdir $RELEASE_BUILD_DIR ;
193       fi
194     - cd $RELEASE_BUILD_DIR
195     - cmake ../$RELEASE_SOURCE/
196       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
197       $CMAKE_COMPILER_SCRIPT
198       $CMAKE_EXTRA_OPTIONS
199       $CMAKE_SIMD_OPTIONS
200       $CMAKE_MPI_OPTIONS
201       $CMAKE_PRECISION_OPTIONS
202       $CMAKE_BUILD_TYPE_OPTIONS
203       $CMAKE_GPU_OPTIONS
204       $CMAKE_GMXAPI_OPTIONS
205       $CMAKE_REGRESSIONTEST_OPTIONS
206       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR
207       2>&1 | tee cmakeLog.log
208     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
209     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
210     - cd ..
211   artifacts:
212     when: always
213     paths:
214       - $RELEASE_BUILD_DIR
215       - $RELEASE_REGRESSIONTESTS
216       - $RELEASE_SOURCE
217
218 # Templates for configuration stage
219
220 gromacs:gcc-7:configure:
221   extends:
222     - .gromacs:base:configure
223     - .use-gcc:base
224     - .use-opencl
225     - .rules:merge-requests
226   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
227   variables:
228     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
229     CMAKE_EXTRA_OPTIONS: "-DGMX_EXTERNAL_CLFFT=ON"
230     COMPILER_MAJOR_VERSION: 7
231
232 gromacs:gcc-8:configure:
233   extends:
234     - .gromacs:base:configure
235     - .use-gcc:base
236     - .use-cuda
237     - .rules:merge-requests
238   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
239   variables:
240     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
241     COMPILER_MAJOR_VERSION: 8
242
243 gromacs:clang-TSAN:configure:
244   extends:
245     - .gromacs:base:configure
246     - .use-clang:base
247     - .rules:merge-requests
248   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
249   variables:
250     COMPILER_MAJOR_VERSION: 8
251     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=TSAN"
252
253 gromacs:clang-8:configure:
254   extends:
255     - .gromacs:base:configure
256     - .use-clang:base
257     - .rules:merge-requests
258   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
259   variables:
260     COMPILER_MAJOR_VERSION: 8
261
262 gromacs:clang-9:configure:
263   extends:
264    - .gromacs:base:configure
265    - .use-clang:base
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:gcc-8:release:configure:
294   extends:
295     - .gromacs:base:release:configure
296     - .use-gcc:base
297     - .use-mpi
298     - .use-cuda
299     - .rules:nightly-only-for-release
300   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
301   variables:
302     COMPILER_MAJOR_VERSION: 8
303     RELEASE_BUILD_DIR: release-builds-gcc
304     CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_MDRUN_ONLY=ON"
305     CMAKE_BUILD_TYPE_OPTIONS : "-DCMAKE_BUILD_TYPE=RelWithDebug"
306     CMAKE_REGRESSIONTEST_OPTIONS: ""
307   dependencies:
308     - archive:package
309     - regressiontests:package
310     - prepare-release-version
311
312 gromacs:gcc-7:release:configure:
313   extends:
314     - .gromacs:base:release:configure
315     - .use-gcc:base
316     - .rules:nightly-only-for-release
317   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
318   variables:
319     COMPILER_MAJOR_VERSION: 7
320     RELEASE_BUILD_DIR: release-builds-gcc
321     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
322   dependencies:
323     - archive:package
324     - regressiontests:package
325     - prepare-release-version
326
327 gromacs:clang-9:release:configure:
328   extends:
329     - .gromacs:base:release:configure
330     - .use-clang:base
331     - .use-mpi
332     - .rules:nightly-only-for-release
333   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
334   variables:
335     COMPILER_MAJOR_VERSION: 9
336     RELEASE_BUILD_DIR: release-builds-clang
337     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
338     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
339   dependencies:
340     - archive:package
341     - regressiontests:package
342     - prepare-release-version
343
344 gromacs:clang-8:release:configure:
345   extends:
346     - .gromacs:base:release:configure
347     - .use-clang:base
348     - .use-cuda
349     - .rules:nightly-only-for-release
350   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
351   variables:
352     COMPILER_MAJOR_VERSION: 8
353     RELEASE_BUILD_DIR: release-builds-clang
354     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithDebug"
355
356 # Jobs running during build stage
357
358 .gromacs:base:build:
359   stage: build
360   script:
361     - cd $BUILD_DIR
362     - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
363     - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
364     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
365       | grep -v "CMake" | tee buildErrors.log || true
366     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
367     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
368     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
369     - cd ..
370   artifacts:
371     when: always
372     paths:
373       - $BUILD_DIR
374       - $INSTALL_DIR/
375
376 .gromacs:static-analyzer-build:
377   stage: build
378   script:
379     - cd $BUILD_DIR
380     - scan-build -o scan_html cmake --build . -- -j8 2>&1 | tee buildLogFile.log
381     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
382       | grep -v "CMake" | tee buildErrors.log || true
383     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
384     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
385     - cd ..
386   artifacts:
387     when: always
388     paths:
389       - $BUILD_DIR/scan_html
390
391 gromacs:gcc-7:build:
392   extends:
393     - .variables:default
394     - .gromacs:base:build
395     - .before_script:default
396     - .use-ccache
397     - .rules:merge-requests
398   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
399   needs:
400     - job: gromacs:gcc-7:configure
401       artifacts: true
402
403 gromacs:gcc-8:build:
404   extends:
405     - .variables:default
406     - .gromacs:base:build
407     - .before_script:default
408     - .use-ccache
409     - .rules:merge-requests
410   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
411   needs:
412     - job: gromacs:gcc-8:configure
413
414 gromacs:clang-TSAN:build:
415   extends:
416     - .variables:default
417     - .gromacs:base:build
418     - .use-clang:base
419     - .use-ccache
420     - .rules:merge-requests
421   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
422   needs:
423     - job: gromacs:clang-TSAN:configure
424
425 gromacs:clang-ASAN:build:
426   extends:
427     - .variables:default
428     - .gromacs:base:build
429     - .use-clang:base
430     - .use-ccache
431     - .rules:merge-requests
432   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
433   needs:
434     - job: gromacs:clang-ASAN:configure
435
436 gromacs:clang-static-analyzer:build:
437   extends:
438     - .variables:default
439     - .gromacs:static-analyzer-build
440     - .use-clang:base
441     - .use-ccache
442     - .rules:merge-requests
443   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
444   needs:
445     - job: gromacs:clang-static-analyzer:configure
446
447 gromacs:clang-8:build:
448   extends:
449     - .variables:default
450     - .gromacs:base:build
451     - .before_script:default
452     - .use-ccache
453     - .rules:merge-requests
454   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
455   needs:
456     - job: gromacs:clang-8:configure
457
458 gromacs:clang-9:build:
459   extends:
460     - .variables:default
461     - .gromacs:base:build
462     - .before_script:default
463     - .use-ccache
464     - .rules:merge-requests
465   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
466   needs:
467     - job: gromacs:clang-9:configure
468
469 gromacs:gcc-8:release:build:
470   extends:
471     - .variables:default  
472     - .gromacs:base:build
473     - .before_script:default
474     - .use-ccache
475     - .rules:nightly-only-for-release
476   stage: release-build
477   variables:
478     BUILD_DIR: release-builds-gcc
479   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
480   needs:
481     - job: gromacs:gcc-8:release:configure
482
483 gromacs:gcc-7:release:build:
484   extends:
485     - .variables:default
486     - .gromacs:base:build
487     - .before_script:default
488     - .use-ccache
489     - .rules:nightly-only-for-release
490   stage: release-build
491   variables:
492     BUILD_DIR: release-builds-gcc
493   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
494   needs:
495     - job: gromacs:gcc-7:release:configure
496
497 gromacs:clang-9:release:build:
498   extends:
499     - .variables:default
500     - .gromacs:base:build
501     - .before_script:default
502     - .use-ccache
503     - .rules:nightly-only-for-release
504   stage: release-build
505   variables:
506     BUILD_DIR: release-builds-clang
507   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
508   needs:
509     - job: gromacs:clang-9:release:configure
510
511 gromacs:clang-8:release:build:
512   extends:
513     - .variables:default
514     - .gromacs:base:build
515     - .before_script:default
516     - .use-ccache
517     - .rules:nightly-only-for-release
518   stage: release-build
519   variables:
520     BUILD_DIR: release-builds-clang
521   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
522   needs:
523     - job: gromacs:clang-8:release:configure
524
525 # Jobs running during test stage
526
527 .gromacs:base:test:
528   extends:
529     - .variables:default
530   stage: test
531   cache: {}
532   retry:
533     max: 1
534   variables:
535     CTEST_RUN_MODE: "ExperimentalTest"
536   script:
537     - cd $BUILD_DIR
538     # Needed to run MPI enabled code in the docker images, until we set up different users
539     - export OMPI_ALLOW_RUN_AS_ROOT=1
540     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
541     - ctest -D $CTEST_RUN_MODE --output-on-failure | tee ctestLog.log || true
542     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
543       ctestLog.log | tee ctestErrors.log
544     - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/*.xml > JUnitTestResults.xml
545     - if [ -s ctestErrors.log ] ; then
546       echo "Error during running ctest";
547       exit 1;
548       fi
549     - cd ..
550   artifacts:
551     reports:
552       junit: $BUILD_DIR/JUnitTestResults.xml
553     paths:
554       - $BUILD_DIR/Testing
555       - $BUILD_DIR/tests
556     when: always
557     expire_in: 1 week
558
559 .gromacs:base:regressiontest:
560   extends:
561     - .variables:default
562   variables:
563     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
564     REGRESSIONTEST_OMP_RANK_NUMBER: 2
565     REGRESSIONTEST_PME_RANK_NUMBER: 1
566     REGRESSIONTEST_MPI_RUN_COMMAND: ""
567     REGRESSIONTEST_DOUBLE: ""
568     REGRESSIONTEST_PARALLEL: "-nt"
569   stage: test
570   cache: {}
571   retry:
572     max: 1
573   script:
574     # This should go away once we are able to run ASAN on mdrun
575     - export ASAN_OPTIONS="detect_leaks=0"
576     # Needed to run MPI enabled code in the docker images, until we set up different users
577     - export OMPI_ALLOW_RUN_AS_ROOT=1
578     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
579     - tar xzf gmx-regressiontests.tar.gz
580     - source $INSTALL_DIR/bin/GMXRC
581     - cd regressiontests
582     - 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
583   artifacts:
584     paths:
585       - regressiontests/gmxtest.xml
586     when: always
587     expire_in: 1 week
588
589 gromacs:gcc-7:test:
590   extends:
591     - .gromacs:base:test
592     - .rules:merge-requests
593   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
594   variables:
595     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
596     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
597   needs:
598     - job: gromacs:gcc-7:build
599
600 gromacs:gcc-8:test:
601   extends:
602     - .gromacs:base:test
603     - .rules:merge-requests
604   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
605   variables:
606     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
607     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
608   needs:
609     - job: gromacs:gcc-8:build
610
611 gromacs:clang-8:test:
612   extends:
613     - .gromacs:base:test
614     - .rules:merge-requests
615   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
616   needs:
617     - job: gromacs:clang-8:build
618
619 gromacs:clang-TSAN:test:
620   extends:
621     - .gromacs:base:test
622     - .rules:merge-requests
623   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
624   needs:
625     - job: gromacs:clang-TSAN:build
626
627 gromacs:clang-ASAN:test:
628   extends:
629     - .gromacs:base:test
630     - .use-clang:base
631     - .rules:merge-requests
632   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
633   variables:
634     CTEST_RUN_MODE: "ExperimentalMemCheck"
635   needs:
636     - job: gromacs:clang-ASAN:build
637
638 gromacs:clang-9:test:
639   extends:
640     - .gromacs:base:test
641     - .rules:merge-requests
642   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
643   needs:
644     - job: gromacs:clang-9:build
645
646 gromacs:gcc-7:regressiontest:
647   extends:
648     - .gromacs:base:regressiontest
649     - .rules:merge-requests
650   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
651   variables:
652     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
653     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
654     REGRESSIONTEST_PME_RANK_NUMBER: 0
655     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
656     REGRESSIONTEST_OMP_RANK_NUMBER: 1
657   needs:
658     - job: gromacs:gcc-7:build
659     - job: regressiontests:prepare
660
661 gromacs:gcc-8:regressiontest:
662   extends:
663     - .gromacs:base:regressiontest
664     - .rules:merge-requests
665   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
666   variables:
667     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
668     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
669     REGRESSIONTEST_PME_RANK_NUMBER: 0
670     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
671     REGRESSIONTEST_OMP_RANK_NUMBER: 1
672   needs:
673     - job: gromacs:gcc-8:build
674     - job: regressiontests:prepare
675
676 gromacs:clang-8:regressiontest:
677   extends:
678     - .gromacs:base:regressiontest
679     - .rules:merge-requests
680   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
681   needs:
682     - job: gromacs:clang-8:build
683     - job: regressiontests:prepare
684
685 gromacs:clang-TSAN:regressiontest:
686   extends:
687     - .gromacs:base:regressiontest
688     - .rules:merge-requests
689   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
690   needs:
691     - job: gromacs:clang-TSAN:build
692     - job: regressiontests:prepare
693
694 gromacs:clang-ASAN:regressiontest:
695   extends:
696     - .gromacs:base:regressiontest
697     - .use-clang:base
698     - .rules:merge-requests
699   image: gromacs/cmake-3.13.0-llvm-8-tsan:master
700   needs:
701     - job: gromacs:clang-ASAN:build
702     - job: regressiontests:prepare
703
704 gromacs:clang-9:regressiontest:
705   extends:
706     - .gromacs:base:regressiontest
707     - .rules:merge-requests
708   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
709   variables:
710     REGRESSIONTEST_DOUBLE: "-double"
711   needs:
712     - job: gromacs:clang-9:build
713     - job: regressiontests:prepare
714
715 gromacs:gcc-8:release:test:
716   extends:
717     - .gromacs:base:test
718     - .rules:nightly-only-for-release
719   stage: release-tests
720   image: gromacs/cmake-3.15.7-gcc-8-cuda-10.1-nvidiaopencl-clfft-openmpi:master
721   variables:
722     BUILD_DIR: release-builds-gcc
723   needs:
724     - job: gromacs:gcc-8:release:configure
725     - job: gromacs:gcc-8:release:build
726
727 gromacs:gcc-7:release:test:
728   extends:
729     - .gromacs:base:test
730     - .rules:nightly-only-for-release
731   stage: release-tests
732   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
733   variables:
734     BUILD_DIR: release-builds-gcc
735   needs:
736     - job: gromacs:gcc-7:release:configure
737     - job: gromacs:gcc-7:release:build
738
739 gromacs:clang-9:release:test:
740   extends:
741     - .gromacs:base:test
742     - .rules:nightly-only-for-release
743   stage: release-tests
744   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
745   variables:
746     BUILD_DIR: release-builds-clang
747   needs:
748     - job: gromacs:clang-9:release:configure
749     - job: gromacs:clang-9:release:build
750
751 gromacs:clang-8:release:test:
752   extends:
753     - .gromacs:base:test
754     - .rules:nightly-only-for-release
755   stage: release-tests
756   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
757   variables:
758     BUILD_DIR: release-builds-clang
759   needs:
760     - job: gromacs:clang-8:release:configure
761     - job: gromacs:clang-8:release:build
762
763 gromacs:gcc-7:release:regressiontest:
764   extends:
765     - .gromacs:base:regressiontest
766     - .rules:nightly-only-for-release
767   stage: release-tests
768   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi:master
769   variables:
770     BUILD_DIR: release-builds-gcc
771   needs:
772     - job: gromacs:gcc-7:release:build
773     - job: regressiontests:package
774
775 gromacs:clang-9:release:regressiontest:
776   extends:
777     - .gromacs:base:regressiontest
778     - .rules:nightly-only-for-release
779   stage: release-tests
780   image: gromacs/cmake-3.15.7-llvm-9-openmpi:master
781   variables:
782     BUILD_DIR: release-builds-clang
783     REGRESSIONTEST_DOUBLE: "-double"
784     REGRESSIONTEST_PARALLEL: "-np"
785   needs:
786     - job: gromacs:clang-9:release:build
787     - job: regressiontests:package
788
789 gromacs:clang-8:release:regressiontest:
790   extends:
791     - .gromacs:base:regressiontest
792     - .rules:nightly-only-for-release
793   stage: release-tests
794   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi:master
795   variables:
796     BUILD_DIR: release-builds-clang
797     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
798     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
799     REGRESSIONTEST_PME_RANK_NUMBER: 0
800     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
801     REGRESSIONTEST_OMP_RANK_NUMBER: 1
802
803   needs:
804     - job: gromacs:clang-8:release:build
805     - job: regressiontests:package
806