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