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