b3e8973407efe8042913ee875c97cdf69250e339
[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=OFF"
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=OFF"
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=OFF"
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-8-cuda-11.0:configure:
232   extends:
233     - .gromacs:base:configure
234     - .use-gcc:base
235     - .use-cuda
236     - .rules:merge-requests
237   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
238   variables:
239     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
240     COMPILER_MAJOR_VERSION: 8
241
242 gromacs:clang-TSAN:configure:
243   extends:
244     - .gromacs:base:configure
245     - .use-clang:base
246     - .rules:merge-requests
247   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
248   variables:
249     COMPILER_MAJOR_VERSION: 8
250     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=TSAN"
251
252 gromacs:clang-8:configure:
253   extends:
254     - .gromacs:base:configure
255     - .use-clang:base
256     - .rules:merge-requests
257   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
258   variables:
259     COMPILER_MAJOR_VERSION: 8
260
261 gromacs:clang-9-mpi:configure:
262   extends:
263    - .gromacs:base:configure
264    - .use-clang:base
265    - .use-mpi
266    - .rules:merge-requests
267   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
268   variables:
269     COMPILER_MAJOR_VERSION: 9
270     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
271
272 gromacs:clang-static-analyzer:configure:
273   extends:
274     - .gromacs:base:configure
275     - .use-clang:base
276     - .rules:merge-requests
277   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
278   variables:
279      CMAKE_COMPILER_SCRIPT: "-DCMAKE_CXX_COMPILER=/usr/local/libexec/c++-analyzer -DCMAKE_C_COMPILER=gcc"
280      CMAKE_EXTRA_OPTIONS: "-DGMX_CLANG_ANALYZER=ON -DGMX_OPENMP=OFF -DGMX_USE_RDTSCP=OFF -DGMX_FFT_LIBRARY=fftpack -DGMX_DEVELOPER_BUILD=ON"
281      CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
282
283 gromacs:clang-ASAN:configure:
284   extends:
285     - .gromacs:base:configure
286     - .use-clang:base
287     - .rules:merge-requests
288   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
289   variables:
290     COMPILER_MAJOR_VERSION: 8
291     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=ASAN"
292
293 gromacs:oneapi-2021.1-beta08:configure:
294   extends:
295    - .gromacs:base:configure
296    - .use-oneapi:base
297    - .rules:merge-requests
298   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
299   variables:
300     COMPILER_MAJOR_VERSION: 2021
301   before_script:
302     # Necessary to override gitlab default 'set -e' which breaks Intel's
303     # setvar.sh script
304     - set +e
305     - source /opt/intel/oneapi/setvars.sh
306
307 gromacs:clang-UBSAN:configure:
308   extends:
309     - .gromacs:base:configure
310     - .use-clang:base
311     - .rules:merge-requests
312   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
313   variables:
314     COMPILER_MAJOR_VERSION: 8
315     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=UBSAN"
316
317 gromacs:gcc-8-cuda-11.0:release:configure:
318   extends:
319     - .gromacs:base:release:configure
320     - .use-gcc:base
321     - .use-mpi
322     - .use-cuda
323     - .rules:nightly-only-for-release
324   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
325   variables:
326     COMPILER_MAJOR_VERSION: 8
327     RELEASE_BUILD_DIR: release-builds-gcc
328     CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_MDRUN_ONLY=ON"
329     CMAKE_BUILD_TYPE_OPTIONS : "-DCMAKE_BUILD_TYPE=RelWithAssert"
330     CMAKE_REGRESSIONTEST_OPTIONS: ""
331   dependencies:
332     - archive:package
333     - regressiontests:package
334     - prepare-release-version
335
336 gromacs:gcc-7:release:configure:
337   extends:
338     - .gromacs:base:release:configure
339     - .use-gcc:base
340     - .rules:nightly-only-for-release
341   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
342   variables:
343     COMPILER_MAJOR_VERSION: 7
344     RELEASE_BUILD_DIR: release-builds-gcc
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-9:release:configure:
352   extends:
353     - .gromacs:base:release:configure
354     - .use-clang:base
355     - .use-mpi
356     - .rules:nightly-only-for-release
357   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
358   variables:
359     COMPILER_MAJOR_VERSION: 9
360     RELEASE_BUILD_DIR: release-builds-clang
361     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
362     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
363   dependencies:
364     - archive:package
365     - regressiontests:package
366     - prepare-release-version
367
368 gromacs:clang-8-cuda-10.1:release:configure:
369   extends:
370     - .gromacs:base:release:configure
371     - .use-clang:base
372     - .use-cuda
373     - .rules:nightly-only-for-release
374   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
375   variables:
376     COMPILER_MAJOR_VERSION: 8
377     RELEASE_BUILD_DIR: release-builds-clang
378     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
379
380 gromacs:oneapi-2021.1-beta08:release:configure:
381   extends:
382    - .gromacs:base:release:configure
383    - .use-oneapi:base
384    - .rules:nightly-only-for-release
385   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
386   variables:
387     COMPILER_MAJOR_VERSION: 2021
388     RELEASE_BUILD_DIR: release-builds-oneapi
389   before_script:
390     # Necessary to override gitlab default 'set -e' which breaks Intel's
391     # setvar.sh script
392     - set +e
393     - source /opt/intel/oneapi/setvars.sh
394
395 # Jobs running during build stage
396
397 .gromacs:base:build:
398   stage: build
399   script:
400     - cd $BUILD_DIR
401     - cmake --build . -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee buildLogFile.log
402     - cmake --build . --target tests -- -j$KUBERNETES_CPU_LIMIT 2>&1 | tee testBuildLogFile.log
403     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
404       | grep -v "CMake" | tee buildErrors.log || true
405     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
406     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
407     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
408     - for file in `find . -mindepth 1 -name "*.o" ! -type l` ; do echo $file ; rm $file ; done 2>&1 > remove-build-objects.log
409     - cd ..
410   artifacts:
411     when: always
412     paths:
413       - $BUILD_DIR
414       - $INSTALL_DIR/
415
416 .gromacs:static-analyzer-build:
417   stage: build
418   script:
419     - cd $BUILD_DIR
420     - scan-build -o scan_html cmake --build . -- -j8 2>&1 | tee buildLogFile.log
421     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
422       | grep -v "CMake" | tee buildErrors.log || true
423     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
424     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
425     - cd ..
426   artifacts:
427     when: always
428     paths:
429       - $BUILD_DIR/scan_html
430
431 gromacs:gcc-7:build:
432   extends:
433     - .variables:default
434     - .gromacs:base:build
435     - .before_script:default
436     - .use-ccache
437     - .rules:merge-requests
438   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
439   needs:
440     - job: gromacs:gcc-7:configure
441       artifacts: true
442
443 gromacs:gcc-8-cuda-11.0:build:
444   extends:
445     - .variables:default
446     - .gromacs:base:build
447     - .before_script:default
448     - .use-ccache
449     - .rules:merge-requests
450   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
451   needs:
452     - job: gromacs:gcc-8-cuda-11.0:configure
453
454 gromacs:clang-TSAN:build:
455   extends:
456     - .variables:default
457     - .gromacs:base:build
458     - .use-clang:base
459     - .use-ccache
460     - .rules:merge-requests
461   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
462   needs:
463     - job: gromacs:clang-TSAN:configure
464
465 gromacs:clang-ASAN:build:
466   extends:
467     - .variables:default
468     - .gromacs:base:build
469     - .use-clang:base
470     - .use-ccache
471     - .rules:merge-requests
472   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
473   tags:
474     - k8s-scilifelab
475   needs:
476     - job: gromacs:clang-ASAN:configure
477
478 gromacs:clang-UBSAN:build:
479   extends:
480     - .variables:default
481     - .gromacs:base:build
482     - .use-clang:base
483     - .use-ccache
484     - .rules:merge-requests
485   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
486   tags:
487     - k8s-scilifelab
488   needs:
489     - job: gromacs:clang-UBSAN:configure
490
491 gromacs:clang-static-analyzer:build:
492   extends:
493     - .variables:default
494     - .gromacs:static-analyzer-build
495     - .use-clang:base
496     - .use-ccache
497     - .rules:merge-requests
498   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
499   tags:
500     - k8s-scilifelab
501   needs:
502     - job: gromacs:clang-static-analyzer:configure
503
504 gromacs:clang-8:build:
505   extends:
506     - .variables:default
507     - .gromacs:base:build
508     - .before_script:default
509     - .use-ccache
510     - .rules:merge-requests
511   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
512   needs:
513     - job: gromacs:clang-8:configure
514
515 gromacs:oneapi-2021.1-beta08:build:
516   extends:
517     - .variables:default
518     - .gromacs:base:build
519     - .use-ccache
520     - .before_script:default
521     - .rules:merge-requests
522   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
523   needs:
524     - job: gromacs:oneapi-2021.1-beta08:configure
525   before_script:
526     # Necessary to override gitlab default 'set -e' which breaks Intel's
527     # setvar.sh script
528     - set +e
529     - source /opt/intel/oneapi/setvars.sh
530
531 gromacs:clang-9-mpi:build:
532   extends:
533     - .variables:default
534     - .gromacs:base:build
535     - .before_script:default
536     - .use-ccache
537     - .rules:merge-requests
538   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
539   needs:
540     - job: gromacs:clang-9-mpi:configure
541
542 gromacs:gcc-8-cuda-11.0:release:build:
543   extends:
544     - .variables:default  
545     - .gromacs:base:build
546     - .before_script:default
547     - .use-ccache
548     - .rules:nightly-only-for-release
549   stage: release-build
550   variables:
551     BUILD_DIR: release-builds-gcc
552   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
553   needs:
554     - job: gromacs:gcc-8-cuda-11.0:release:configure
555
556 gromacs:gcc-7:release:build:
557   extends:
558     - .variables:default
559     - .gromacs:base:build
560     - .before_script:default
561     - .use-ccache
562     - .rules:nightly-only-for-release
563   stage: release-build
564   variables:
565     BUILD_DIR: release-builds-gcc
566   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
567   needs:
568     - job: gromacs:gcc-7:release:configure
569
570 gromacs:clang-9:release:build:
571   extends:
572     - .variables:default
573     - .gromacs:base:build
574     - .before_script:default
575     - .use-ccache
576     - .rules:nightly-only-for-release
577   stage: release-build
578   variables:
579     BUILD_DIR: release-builds-clang
580   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
581   needs:
582     - job: gromacs:clang-9:release:configure
583
584 gromacs:clang-8-cuda-10.1:release:build:
585   extends:
586     - .variables:default
587     - .gromacs:base:build
588     - .before_script:default
589     - .use-ccache
590     - .rules:nightly-only-for-release
591   stage: release-build
592   variables:
593     BUILD_DIR: release-builds-clang
594   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
595   needs:
596     - job: gromacs:clang-8-cuda-10.1:release:configure
597
598 gromacs:oneapi-2021.1-beta08:release:build:
599   extends:
600     - .variables:default
601     - .gromacs:base:build
602     - .use-oneapi:base
603     - .before_script:default
604     - .use-ccache
605     - .rules:nightly-only-for-release
606   stage: release-build
607   variables:
608     BUILD_DIR: release-builds-oneapi
609     COMPILER_MAJOR_VERSION: 2021
610   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
611   needs:
612     - job: gromacs:oneapi-2021.1-beta08:release:configure
613   before_script:
614     # Necessary to override gitlab default 'set -e' which breaks Intel's
615     # setvar.sh script
616     - set +e
617     - source /opt/intel/oneapi/setvars.sh
618
619 # Jobs running during test stage
620
621 .gromacs:base:test:
622   extends:
623     - .variables:default
624   stage: test
625   cache: {}
626   retry:
627     max: 1
628   variables:
629     CTEST_RUN_MODE: "ExperimentalTest"
630   script:
631     - cd $BUILD_DIR
632     - export UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1:suppressions=$CI_PROJECT_DIR/admin/ubsan-suppressions.txt
633     # Needed to run MPI enabled code in the docker images, until we set up different users
634     - export OMPI_ALLOW_RUN_AS_ROOT=1
635     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
636     - 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"
637     - ctest -D $CTEST_RUN_MODE --output-on-failure | tee ctestLog.log || true
638     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
639       ctestLog.log | tee ctestErrors.log
640     - xsltproc $CI_PROJECT_DIR/scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/*.xml > JUnitTestResults.xml
641     - if [ -s ctestErrors.log ] ; then
642       echo "Error during running ctest";
643       exit 1;
644       fi
645     - cd ..
646   artifacts:
647     reports:
648       junit: $BUILD_DIR/JUnitTestResults.xml
649     paths:
650       - $BUILD_DIR/Testing
651       - $BUILD_DIR/tests
652     when: always
653     expire_in: 1 week
654
655 .gromacs:base:regressiontest:
656   extends:
657     - .variables:default
658   variables:
659     KUBERNETES_CPU_LIMIT: 4
660     KUBERNETES_CPU_REQUEST: 4
661     KUBERNETES_MEMORY_REQUEST: 4Gi
662     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
663     REGRESSIONTEST_OMP_RANK_NUMBER: 2
664     REGRESSIONTEST_PME_RANK_NUMBER: 1
665     REGRESSIONTEST_MPI_RUN_COMMAND: ""
666     REGRESSIONTEST_DOUBLE: ""
667     REGRESSIONTEST_PARALLEL: "-nt"
668   stage: test
669   cache: {}
670   retry:
671     max: 1
672   script:
673     - export LSAN_OPTIONS="suppressions=$CI_PROJECT_DIR/admin/lsan-suppressions.txt:print_suppressions=0"
674     - 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"
675     # Needed to run MPI enabled code in the docker images, until we set up different users
676     - export OMPI_ALLOW_RUN_AS_ROOT=1
677     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
678     - tar xzf gmx-regressiontests.tar.gz
679     - source $INSTALL_DIR/bin/GMXRC
680     - cd regressiontests
681     - 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
682   artifacts:
683     paths:
684       - regressiontests/gmxtest.xml
685     when: always
686     expire_in: 1 week
687
688 gromacs:gcc-7:test:
689   extends:
690     - .gromacs:base:test
691     - .rules:merge-requests
692   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
693   variables:
694     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
695     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
696   tags:
697     - k8s-scilifelab
698   needs:
699     - job: gromacs:gcc-7:build
700
701 gromacs:gcc-8-cuda-11.0:test:
702   extends:
703     - .gromacs:base:test
704     - .rules:merge-requests
705   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
706   variables:
707     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
708     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
709   tags:
710     - k8s-scilifelab
711   needs:
712     - job: gromacs:gcc-8-cuda-11.0:build
713
714 gromacs:clang-8:test:
715   extends:
716     - .gromacs:base:test
717     - .rules:merge-requests
718   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
719   needs:
720     - job: gromacs:clang-8:build
721
722 gromacs:clang-TSAN:test:
723   extends:
724     - .gromacs:base:test
725     - .rules:merge-requests
726   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
727   needs:
728     - job: gromacs:clang-TSAN:build
729
730 gromacs:clang-ASAN:test:
731   extends:
732     - .gromacs:base:test
733     - .use-clang:base
734     - .rules:merge-requests
735   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
736   variables:
737     CTEST_RUN_MODE: "ExperimentalMemCheck"
738   tags:
739     - k8s-scilifelab
740   needs:
741     - job: gromacs:clang-ASAN:build
742
743 gromacs:clang-UBSAN:test:
744   extends:
745     - .gromacs:base:test
746     - .use-clang:base
747     - .rules:merge-requests
748   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
749   tags:
750     - k8s-scilifelab
751   needs:
752     - job: gromacs:clang-UBSAN:build
753
754 gromacs:oneapi-2021.1-beta08:test:
755   extends:
756     - .gromacs:base:test
757     - .rules:merge-requests
758   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
759   needs:
760     - job: gromacs:oneapi-2021.1-beta08:build
761   before_script:
762     # Necessary to override gitlab default 'set -e' which breaks Intel's
763     # setvar.sh script
764     - set +e
765     - source /opt/intel/oneapi/setvars.sh
766
767 gromacs:clang-9-mpi:test:
768   extends:
769     - .gromacs:base:test
770     - .rules:merge-requests
771   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
772   tags:
773     - k8s-scilifelab
774   needs:
775     - job: gromacs:clang-9-mpi:build
776
777 gromacs:gcc-7:regressiontest:
778   extends:
779     - .gromacs:base:regressiontest
780     - .rules:merge-requests
781   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
782   variables:
783     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
784     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
785     REGRESSIONTEST_PME_RANK_NUMBER: 0
786     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
787     REGRESSIONTEST_OMP_RANK_NUMBER: 1
788   tags:
789     - k8s-scilifelab
790   needs:
791     - job: gromacs:gcc-7:build
792     - job: regressiontests:prepare
793
794 gromacs:gcc-8-cuda-11.0:regressiontest:
795   extends:
796     - .gromacs:base:regressiontest
797     - .rules:merge-requests
798   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
799   variables:
800     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
801     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
802     REGRESSIONTEST_PME_RANK_NUMBER: 0
803     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
804     REGRESSIONTEST_OMP_RANK_NUMBER: 1
805   tags:
806     - k8s-scilifelab
807   needs:
808     - job: gromacs:gcc-8-cuda-11.0:build
809     - job: regressiontests:prepare
810
811 gromacs:clang-8:regressiontest:
812   extends:
813     - .gromacs:base:regressiontest
814     - .rules:merge-requests
815   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
816   tags:
817     - k8s-scilifelab
818   needs:
819     - job: gromacs:clang-8:build
820     - job: regressiontests:prepare
821
822 gromacs:clang-TSAN:regressiontest:
823   extends:
824     - .gromacs:base:regressiontest
825     - .rules:merge-requests
826   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
827   tags:
828     - k8s-scilifelab
829   needs:
830     - job: gromacs:clang-TSAN:build
831     - job: regressiontests:prepare
832
833 gromacs:clang-ASAN:regressiontest:
834   extends:
835     - .gromacs:base:regressiontest
836     - .use-clang:base
837     - .rules:merge-requests
838   image: gromacs/cmake-3.13.0-llvm-8-tsan-master
839   tags:
840     - k8s-scilifelab
841   needs:
842     - job: gromacs:clang-ASAN:build
843     - job: regressiontests:prepare
844
845 gromacs:clang-9:regressiontest:
846   extends:
847     - .gromacs:base:regressiontest
848     - .rules:merge-requests
849   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
850   variables:
851     REGRESSIONTEST_DOUBLE: "-double"
852     REGRESSIONTEST_PARALLEL: "-np"
853   tags:
854     - k8s-scilifelab
855   needs:
856     - job: gromacs:clang-9-mpi:build
857     - job: regressiontests:prepare
858
859 gromacs:oneapi-2021.1-beta08:regressiontest:
860   extends:
861     - .gromacs:base:regressiontest
862     - .rules:merge-requests
863   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
864   needs:
865     - job: gromacs:oneapi-2021.1-beta08:build
866     - job: regressiontests:prepare
867   before_script:
868     # Necessary to override gitlab default 'set -e' which breaks Intel's
869     # setvar.sh script
870     - set +e
871     - source /opt/intel/oneapi/setvars.sh
872
873 gromacs:gcc-8-cuda-11.0:release:test:
874   extends:
875     - .gromacs:base:test
876     - .rules:nightly-only-for-release
877   stage: release-tests
878   image: gromacs/cmake-3.15.7-gcc-8-cuda-11.0-nvidiaopencl-clfft-openmpi-master
879   variables:
880     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
881     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
882     BUILD_DIR: release-builds-gcc
883   tags:
884     - k8s-scilifelab
885   needs:
886     - job: gromacs:gcc-8-cuda-11.0:release:configure
887     - job: gromacs:gcc-8-cuda-11.0:release:build
888
889 gromacs:gcc-7:release:test:
890   extends:
891     - .gromacs:base:test
892     - .rules:nightly-only-for-release
893   stage: release-tests
894   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
895   variables:
896     BUILD_DIR: release-builds-gcc
897   needs:
898     - job: gromacs:gcc-7:release:configure
899     - job: gromacs:gcc-7:release:build
900
901 gromacs:clang-9:release:test:
902   extends:
903     - .gromacs:base:test
904     - .rules:nightly-only-for-release
905   stage: release-tests
906   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
907   variables:
908     BUILD_DIR: release-builds-clang
909   needs:
910     - job: gromacs:clang-9:release:configure
911     - job: gromacs:clang-9:release:build
912
913 gromacs:clang-8-cuda-10.1:release:test:
914   extends:
915     - .gromacs:base:test
916     - .rules:nightly-only-for-release
917   stage: release-tests
918   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
919   variables:
920     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
921     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
922     BUILD_DIR: release-builds-clang
923   tags:
924     - k8s-scilifelab
925   needs:
926     - job: gromacs:clang-8-cuda-10.1:release:configure
927     - job: gromacs:clang-8-cuda-10.1:release:build
928
929 gromacs:oneapi-2021.1-beta08:release:test:
930   extends:
931     - .gromacs:base:test
932     - .rules:nightly-only-for-release
933   stage: release-tests
934   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
935   variables:
936     BUILD_DIR: release-builds-oneapi
937   needs:
938     - job: gromacs:oneapi-2021.1-beta08:release:configure
939     - job: gromacs:oneapi-2021.1-beta08:release:build
940   before_script:
941     # Necessary to override gitlab default 'set -e' which breaks Intel's
942     # setvar.sh script
943     - set +e
944     - source /opt/intel/oneapi/setvars.sh
945
946 gromacs:gcc-7:release:regressiontest:
947   extends:
948     - .gromacs:base:regressiontest
949     - .rules:nightly-only-for-release
950   stage: release-tests
951   image: gromacs/cmake-3.13.0-gcc-7-amdopencl-clfft-openmpi-master
952   variables:
953     BUILD_DIR: release-builds-gcc
954   tags:
955     - k8s-scilifelab
956   needs:
957     - job: gromacs:gcc-7:release:build
958     - job: regressiontests:package
959
960 gromacs:clang-9:release:regressiontest:
961   extends:
962     - .gromacs:base:regressiontest
963     - .rules:nightly-only-for-release
964   stage: release-tests
965   image: gromacs/cmake-3.15.7-llvm-9-openmpi-master
966   variables:
967     BUILD_DIR: release-builds-clang
968     REGRESSIONTEST_DOUBLE: "-double"
969     REGRESSIONTEST_PARALLEL: "-np"
970   tags:
971     - k8s-scilifelab
972   needs:
973     - job: gromacs:clang-9:release:build
974     - job: regressiontests:package
975
976 gromacs:clang-8-cuda-10.1:release:regressiontest:
977   extends:
978     - .gromacs:base:regressiontest
979     - .rules:nightly-only-for-release
980   stage: release-tests
981   image: gromacs/cmake-3.15.7-llvm-8-cuda-10.1-openmpi-master
982   variables:
983     BUILD_DIR: release-builds-clang
984     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
985     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
986     REGRESSIONTEST_PME_RANK_NUMBER: 0
987     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
988     REGRESSIONTEST_OMP_RANK_NUMBER: 1
989   tags:
990     - k8s-scilifelab
991   needs:
992     - job: gromacs:clang-8-cuda-10.1:release:build
993     - job: regressiontests:package
994
995 gromacs:oneapi-2021.1-beta08:release:regressiontest:
996   extends:
997     - .gromacs:base:regressiontest
998     - .rules:nightly-only-for-release
999   stage: release-tests
1000   image: gromacs/cmake-3.17.2-oneapi-2021.1-beta08-master
1001   variables:
1002     BUILD_DIR: release-builds-oneapi
1003     REGRESSIONTEST_PME_RANK_NUMBER: 0
1004     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
1005     REGRESSIONTEST_OMP_RANK_NUMBER: 1
1006   needs:
1007     - job: gromacs:oneapi-2021.1-beta08:release:build
1008     - job: regressiontests:package
1009   before_script:
1010     # Necessary to override gitlab default 'set -e' which breaks Intel's
1011     # setvar.sh script
1012     - set +e
1013     - source /opt/intel/oneapi/setvars.sh