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