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