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