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