Change builds that use failing docker containers
[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-7-amdopencl-clfft-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: 7
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 # All jobs marked with temp are changed from the original gcc-6 cuda
232 # jobs such as to preserve the original job here and to make it possible to
233 # just switch them back once the issues with build system have been fixed.
234 # TODO switch back to using gromacs:gcc-6:configure
235 gromacs:gcc-7:configure-temp:
236   extends:
237     - .gromacs:base:configure
238     - .use-gcc:base
239     - .use-opencl
240     - .rules:merge-requests
241   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
242   variables:
243     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
244     COMPILER_MAJOR_VERSION: 7
245     CMAKE_EXTRA_OPTIONS: "-DGMX_EXTERNAL_CLFFT=ON"
246
247 gromacs:clang-TSAN:configure:
248   extends:
249     - .gromacs:base:configure
250     - .use-clang:base
251     - .rules:merge-requests
252   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
253   variables:
254     COMPILER_MAJOR_VERSION: 8
255     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=TSAN"
256
257 gromacs:clang-8:configure:
258   extends:
259     - .gromacs:base:configure
260     - .use-clang:base
261     - .rules:merge-requests
262   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
263   variables:
264     COMPILER_MAJOR_VERSION: 8
265
266 gromacs:clang-3.6:configure:
267   extends:
268     - .gromacs:base:configure
269     - .use-clang:base
270     - .use-mpi
271     - .rules:merge-requests
272   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
273   variables:
274     COMPILER_MAJOR_VERSION: "3.6"
275     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
276     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
277     CMAKE_EXTRA_OPTIONS: "-DGMX_OPENMP=OFF"
278
279 gromacs:clang-static-analyzer:configure:
280   extends:
281     - .gromacs:base:configure
282     - .use-clang:base
283     - .rules:merge-requests
284   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
285   variables:
286      CMAKE_COMPILER_SCRIPT: "-DCMAKE_CXX_COMPILER=/usr/local/libexec/c++-analyzer -DCMAKE_C_COMPILER=gcc"
287      CMAKE_EXTRA_OPTIONS: "-DGMX_CLANG_ANALYZER=ON -DGMX_OPENMP=OFF -DGMX_USE_RDTSCP=OFF -DGMX_FFT_LIBRARY=fftpack -DGMX_DEVELOPER_BUILD=ON"
288      CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=None"
289
290 gromacs:clang-ASAN:configure:
291   extends:
292     - .gromacs:base:configure
293     - .use-clang:base
294     - .rules:merge-requests
295   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
296   variables:
297     COMPILER_MAJOR_VERSION: 8
298     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=ASAN"
299
300 # TODO switch back to using gromacs:gcc-6:release:configure
301 gromacs:gcc-7:release:configure-temp:
302   extends:
303     - .gromacs:base:release:configure
304     - .use-gcc:base
305     - .rules:nightly-only-for-release
306   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
307   variables:
308     COMPILER_MAJOR_VERSION: 7
309     RELEASE_BUILD_DIR: release-builds-gcc
310     CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_MDRUN_ONLY=ON"
311     CMAKE_BUILD_TYPE_OPTIONS : "-DCMAKE_BUILD_TYPE=RelWithDebug"
312     CMAKE_REGRESSIONTEST_OPTIONS: ""
313   dependencies:
314     - archive:package
315     - regressiontests:package
316     - prepare-release-version
317
318 gromacs:gcc-7:release:configure:
319   extends:
320     - .gromacs:base:release:configure
321     - .use-gcc:base
322     - .rules:nightly-only-for-release
323   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
324   variables:
325     COMPILER_MAJOR_VERSION: 7
326     RELEASE_BUILD_DIR: release-builds-gcc
327     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
328   dependencies:
329     - archive:package
330     - regressiontests:package
331     - prepare-release-version
332
333 gromacs:clang-3.6:release:configure:
334   extends:
335     - .gromacs:base:release:configure
336     - .use-clang:base
337     - .use-mpi
338     - .rules:nightly-only-for-release
339   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
340   variables:
341     COMPILER_MAJOR_VERSION: "3.6"
342     RELEASE_BUILD_DIR: release-builds-clang
343     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
344     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
345     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
346     CMAKE_EXTRA_OPTIONS: "-DGMX_OPENMP=OFF"
347   dependencies:
348     - archive:package
349     - regressiontests:package
350     - prepare-release-version
351
352 gromacs:clang-8:release:configure:
353   extends:
354     - .gromacs:base:release:configure
355     - .use-clang:base
356     - .rules:nightly-only-for-release
357   image: gromacs/cmake-3.11.4-llvm-8-openmpi:2020
358   variables:
359     COMPILER_MAJOR_VERSION: 8
360     RELEASE_BUILD_DIR: release-builds-clang
361     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithDebug"
362
363 # Jobs running during build stage
364
365 .gromacs:base:build:
366   stage: build
367   script:
368     - cd $BUILD_DIR
369     - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
370     - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
371     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
372       | grep -v "CMake" | tee buildErrors.log || true
373     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
374     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
375     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
376     - cd ..
377   artifacts:
378     when: always
379     paths:
380       - $BUILD_DIR
381       - $INSTALL_DIR/
382
383 .gromacs:static-analyzer-build:
384   stage: build
385   script:
386     - cd $BUILD_DIR
387     - scan-build -o scan_html cmake --build . -- -j8 2>&1 | tee buildLogFile.log
388     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log
389       | grep -v "CMake" | tee buildErrors.log || true
390     - grep "cannot be built" buildLogFile.log | tee -a buildErrors.log || true
391     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
392     - cd ..
393   artifacts:
394     when: always
395     paths:
396       - $BUILD_DIR/scan_html
397
398 gromacs:gcc-7:build:
399   extends:
400     - .variables:default
401     - .gromacs:base:build
402     - .before_script:default
403     - .use-ccache
404     - .rules:merge-requests
405   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
406   needs:
407     - job: gromacs:gcc-7:configure
408       artifacts: true
409
410 # TODO switch back to using gromacs:gcc-6:build
411 gromacs:gcc-7:build-temp:
412   extends:
413     - .variables:default
414     - .gromacs:base:build
415     - .before_script:default
416     - .use-ccache
417     - .rules:merge-requests
418   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
419   needs:
420     - job: gromacs:gcc-7:configure-temp
421
422 gromacs:clang-TSAN:build:
423   extends:
424     - .variables:default
425     - .gromacs:base:build
426     - .use-clang:base
427     - .use-ccache
428     - .rules:merge-requests
429   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
430   needs:
431     - job: gromacs:clang-TSAN:configure
432
433 gromacs:clang-ASAN:build:
434   extends:
435     - .variables:default
436     - .gromacs:base:build
437     - .use-clang:base
438     - .use-ccache
439     - .rules:merge-requests
440   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
441   needs:
442     - job: gromacs:clang-ASAN:configure
443
444 gromacs:clang-static-analyzer:build:
445   extends:
446     - .variables:default
447     - .gromacs:static-analyzer-build
448     - .use-clang:base
449     - .use-ccache
450     - .rules:merge-requests
451   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
452   needs:
453     - job: gromacs:clang-static-analyzer:configure
454
455 gromacs:clang-8:build:
456   extends:
457     - .variables:default
458     - .gromacs:base:build
459     - .before_script:default
460     - .use-ccache
461     - .rules:merge-requests
462   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
463   needs:
464     - job: gromacs:clang-8:configure
465
466 gromacs:clang-3.6:build:
467   extends:
468     - .variables:default
469     - .gromacs:base:build
470     - .before_script:default
471     - .use-ccache
472     - .rules:merge-requests
473   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
474   needs:
475     - job: gromacs:clang-3.6:configure
476
477 # TODO switch back to using gromacs:gcc-6:release:build
478 gromacs:gcc-7:release:build-temp:
479   extends:
480     - .variables:default  
481     - .gromacs:base:build
482     - .before_script:default
483     - .use-ccache
484     - .rules:nightly-only-for-release
485   stage: release-build
486   variables:
487     BUILD_DIR: release-builds-gcc
488   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
489   needs:
490     - job: gromacs:gcc-7:release:configure-temp
491
492 gromacs:gcc-7:release:build:
493   extends:
494     - .variables:default
495     - .gromacs:base:build
496     - .before_script:default
497     - .use-ccache
498     - .rules:nightly-only-for-release
499   stage: release-build
500   variables:
501     BUILD_DIR: release-builds-gcc
502   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
503   needs:
504     - job: gromacs:gcc-7:release:configure
505
506 gromacs:clang-3.6:release:build:
507   extends:
508     - .variables:default
509     - .gromacs:base:build
510     - .before_script:default
511     - .use-ccache
512     - .rules:nightly-only-for-release
513   stage: release-build
514   variables:
515     BUILD_DIR: release-builds-clang
516   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
517   needs:
518     - job: gromacs:clang-3.6:release:configure
519
520 gromacs:clang-8:release:build:
521   extends:
522     - .variables:default
523     - .gromacs:base:build
524     - .before_script:default
525     - .use-ccache
526     - .rules:nightly-only-for-release
527   stage: release-build
528   variables:
529     BUILD_DIR: release-builds-clang
530   image: gromacs/cmake-3.11.4-llvm-8-openmpi:2020
531   needs:
532     - job: gromacs:clang-8:release:configure
533
534 # Jobs running during test stage
535
536 .gromacs:base:test:
537   extends:
538     - .variables:default
539   stage: test
540   cache: {}
541   retry:
542     max: 1
543   variables:
544     CTEST_RUN_MODE: "ExperimentalTest"
545   script:
546     - cd $BUILD_DIR
547     # Needed to run MPI enabled code in the docker images, until we set up different users
548     - export OMPI_ALLOW_RUN_AS_ROOT=1
549     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
550     - ctest -D $CTEST_RUN_MODE --output-on-failure | tee ctestLog.log || true
551     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
552       ctestLog.log | tee ctestErrors.log
553     - xsltproc $CI_PROJECT_DIR/scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/*.xml > JUnitTestResults.xml
554     - if [ -s ctestErrors.log ] ; then
555       echo "Error during running ctest";
556       exit 1;
557       fi
558     - cd ..
559   artifacts:
560     reports:
561       junit: $BUILD_DIR/JUnitTestResults.xml
562     paths:
563       - $BUILD_DIR/Testing
564       - $BUILD_DIR/tests
565     when: always
566     expire_in: 1 week
567
568 .gromacs:base:regressiontest:
569   extends:
570     - .variables:default
571   variables:
572     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
573     REGRESSIONTEST_OMP_RANK_NUMBER: 2
574     REGRESSIONTEST_PME_RANK_NUMBER: 1
575     REGRESSIONTEST_MPI_RUN_COMMAND: ""
576     REGRESSIONTEST_DOUBLE: ""
577     REGRESSIONTEST_PARALLEL: "-nt"
578   stage: test
579   cache: {}
580   retry:
581     max: 1
582   script:
583     # This should go away once we are able to run ASAN on mdrun
584     - export ASAN_OPTIONS="detect_leaks=0"
585     # Needed to run MPI enabled code in the docker images, until we set up different users
586     - export OMPI_ALLOW_RUN_AS_ROOT=1
587     - export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
588     - tar xzf gmx-regressiontests.tar.gz
589     - source $INSTALL_DIR/bin/GMXRC
590     - cd regressiontests
591     - 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
592   artifacts:
593     paths:
594       - regressiontests/gmxtest.xml
595     when: always
596     expire_in: 1 week
597
598 gromacs:gcc-7:test:
599   extends:
600     - .gromacs:base:test
601     - .rules:merge-requests
602   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
603   variables:
604     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
605     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
606   needs:
607     - job: gromacs:gcc-7:build
608
609 # TODO switch back to using gromacs:gcc-6:test
610 gromacs:gcc-7:test-temp:
611   extends:
612     - .gromacs:base:test
613     - .rules:merge-requests
614   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
615   variables:
616     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
617     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
618   needs:
619     - job: gromacs:gcc-7:build-temp
620
621 gromacs:clang-8:test:
622   extends:
623     - .gromacs:base:test
624     - .rules:merge-requests
625   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
626   needs:
627     - job: gromacs:clang-8:build
628
629 gromacs:clang-TSAN:test:
630   extends:
631     - .gromacs:base:test
632     - .rules:merge-requests
633   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
634   needs:
635     - job: gromacs:clang-TSAN:build
636
637 gromacs:clang-ASAN:test:
638   extends:
639     - .gromacs:base:test
640     - .use-clang:base
641     - .rules:merge-requests
642   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
643   variables:
644     CTEST_RUN_MODE: "ExperimentalMemCheck"
645   needs:
646     - job: gromacs:clang-ASAN:build
647
648 gromacs:clang-3.6:test:
649   extends:
650     - .gromacs:base:test
651     - .rules:merge-requests
652   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
653   needs:
654     - job: gromacs:clang-3.6:build
655
656 gromacs:gcc-7:regressiontest:
657   extends:
658     - .gromacs:base:regressiontest
659     - .rules:merge-requests
660   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
661   variables:
662     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
663     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
664     REGRESSIONTEST_PME_RANK_NUMBER: 0
665     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
666     REGRESSIONTEST_OMP_RANK_NUMBER: 1
667   needs:
668     - job: gromacs:gcc-7:build
669     - job: regressiontests:prepare
670
671 # TODO switch back to using gromacs:gcc-6:regressiontest
672 gromacs:gcc-7:regressiontest-temp:
673   extends:
674     - .gromacs:base:regressiontest
675     - .rules:merge-requests
676   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
677   variables:
678     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
679     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
680     REGRESSIONTEST_PME_RANK_NUMBER: 0
681     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
682     REGRESSIONTEST_OMP_RANK_NUMBER: 1
683   needs:
684     - job: gromacs:gcc-7:build-temp
685     - job: regressiontests:prepare
686
687 gromacs:clang-8:regressiontest:
688   extends:
689     - .gromacs:base:regressiontest
690     - .rules:merge-requests
691   image: gromacs/cmake-3.15.7-llvm-8-intelopencl-openmpi:2020
692   needs:
693     - job: gromacs:clang-8:build
694     - job: regressiontests:prepare
695
696 gromacs:clang-TSAN:regressiontest:
697   extends:
698     - .gromacs:base:regressiontest
699     - .rules:merge-requests
700   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
701   needs:
702     - job: gromacs:clang-TSAN:build
703     - job: regressiontests:prepare
704
705 gromacs:clang-ASAN:regressiontest:
706   extends:
707     - .gromacs:base:regressiontest
708     - .use-clang:base
709     - .rules:merge-requests
710   image: gromacs/cmake-3.15.7-llvm-8-tsan:2020
711   needs:
712     - job: gromacs:clang-ASAN:build
713     - job: regressiontests:prepare
714
715 gromacs:clang-3.6:regressiontest:
716   extends:
717     - .gromacs:base:regressiontest
718     - .rules:merge-requests
719   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
720   variables:
721     REGRESSIONTEST_DOUBLE: "-double"
722     REGRESSIONTEST_OMP_RANK_NUMBER: 0
723     REGRESSIONTEST_PARALLEL: "-np"
724   needs:
725     - job: gromacs:clang-3.6:build
726     - job: regressiontests:prepare
727
728 # TODO switch back to using gromacs:gcc-6:release:test
729 gromacs:gcc-7:release:test-temp:
730   extends:
731     - .gromacs:base:test
732     - .rules:nightly-only-for-release
733   stage: release-tests
734   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
735   variables:
736     BUILD_DIR: release-builds-gcc
737   needs:
738     - job: gromacs:gcc-7:release:configure-temp
739     - job: gromacs:gcc-7:release:build-temp
740
741 gromacs:gcc-7:release:test:
742   extends:
743     - .gromacs:base:test
744     - .rules:nightly-only-for-release
745   stage: release-tests
746   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
747   variables:
748     BUILD_DIR: release-builds-gcc
749   needs:
750     - job: gromacs:gcc-7:release:configure
751     - job: gromacs:gcc-7:release:build
752
753 gromacs:clang-3.6:release:test:
754   extends:
755     - .gromacs:base:test
756     - .rules:nightly-only-for-release
757   stage: release-tests
758   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
759   variables:
760     BUILD_DIR: release-builds-clang
761   needs:
762     - job: gromacs:clang-3.6:release:configure
763     - job: gromacs:clang-3.6:release:build
764
765 gromacs:clang-8:release:test:
766   extends:
767     - .gromacs:base:test
768     - .rules:nightly-only-for-release
769   stage: release-tests
770   image: gromacs/cmake-3.11.4-llvm-8-openmpi:2020
771   variables:
772     BUILD_DIR: release-builds-clang
773   needs:
774     - job: gromacs:clang-8:release:configure
775     - job: gromacs:clang-8:release:build
776
777 gromacs:gcc-7:release:regressiontest:
778   extends:
779     - .gromacs:base:regressiontest
780     - .rules:nightly-only-for-release
781   stage: release-tests
782   image: gromacs/cmake-3.9.6-gcc-7-amdopencl-clfft-openmpi:2020
783   variables:
784     BUILD_DIR: release-builds-gcc
785   needs:
786     - job: gromacs:gcc-7:release:build
787     - job: regressiontests:package
788
789 gromacs:clang-3.6:release:regressiontest:
790   extends:
791     - .gromacs:base:regressiontest
792     - .rules:nightly-only-for-release
793   stage: release-tests
794   image: gromacs/cmake-3.9.6-llvm-3.6-amdopencl-openmpi:2020
795   variables:
796     BUILD_DIR: release-builds-clang
797     REGRESSIONTEST_DOUBLE: "-double"
798     REGRESSIONTEST_OMP_RANK_NUMBER: 0
799     REGRESSIONTEST_PARALLEL: "-np"
800   needs:
801     - job: gromacs:clang-3.6:release:build
802     - job: regressiontests:package
803
804 gromacs:clang-8:release:regressiontest:
805   extends:
806     - .gromacs:base:regressiontest
807     - .rules:nightly-only-for-release
808   stage: release-tests
809   image: gromacs/cmake-3.11.4-llvm-8-openmpi:2020
810   variables:
811     BUILD_DIR: release-builds-clang
812     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
813     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
814     REGRESSIONTEST_PME_RANK_NUMBER: 0
815     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
816     REGRESSIONTEST_OMP_RANK_NUMBER: 1
817
818   needs:
819     - job: gromacs:clang-8:release:build
820     - job: regressiontests:package
821