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