Fix release builds on Gitlab with regressiontests
[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     - .use-ccache
7     - .variables:default
8     - .use-gcc7
9     - .rules:not-for-release
10   stage: pre-build
11   variables:
12     KUBERNETES_CPU_LIMIT: 8
13     KUBERNETES_CPU_REQUEST: 4
14     KUBERNETES_MEMORY_LIMIT: 8Gi
15     CMAKE_COMPILER_SCRIPT: ""
16     CMAKE_EXTRA_OPTIONS: ""
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     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 . -- -j8 2>&1 | tee buildLogFile.log
56     - cmake --build . --target tests -- -j8 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 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   cache: {}
85   stage: configure-build
86   variables:
87     KUBERNETES_CPU_LIMIT: 1
88     KUBERNETES_CPU_REQUEST: 1
89     KUBERNETES_MEMORY_LIMIT: 2Gi
90     CMAKE_COMPILER_SCRIPT: ""
91     CMAKE_EXTRA_OPTIONS: ""
92     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
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   cache: {}
137   stage: release-configure
138   variables:
139     KUBERNETES_CPU_LIMIT: 1
140     KUBERNETES_CPU_REQUEST: 1
141     KUBERNETES_MEMORY_LIMIT: 2Gi
142     CMAKE_COMPILER_SCRIPT: ""
143     CMAKE_EXTRA_OPTIONS: ""
144     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
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     RELEASE_BUILD_DIR: release-builds
150     RELEASE_SOURCE: release-source-from-tarball
151     RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
152   script:
153     - VERSION=`cat version.json |
154       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
155     - if [[ $GROMACS_RELEASE != "true" ]] ; then
156       VERSION=$VERSION-dev ;
157       fi
158     - SOURCENAME=gromacs-$VERSION
159     - SOURCETARBALL=$SOURCENAME.tar.gz
160     - REGTESTNAME=regressiontests-$VERSION
161     - REGTESTTARBALL=$REGTESTNAME.tar.gz
162     - echo "$SOURCETARBALL"
163     - echo "$REGTESTTARBALL"
164     - RELEASE_TARBALLS=release-tarballs
165     - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
166     - mv $SOURCETARBALL $RELEASE_TARBALLS
167     - mv $REGTESTTARBALL $RELEASE_TARBALLS
168     - cd $RELEASE_TARBALLS
169     # We rename the source and regressiontest directories
170     # to have names for them that don't change for different versions.
171     - tar -xf $SOURCETARBALL
172     - mv $SOURCENAME ../$RELEASE_SOURCE
173     - tar -xf $REGTESTTARBALL
174     - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
175     - rm $SOURCETARBALL $REGTESTTARBALL
176     - cd ..
177     - echo $CMAKE_COMPILER_SCRIPT
178     - echo $CMAKE_EXTRA_OPTIONS
179     - echo $CMAKE_SIMD_OPTIONS
180     - echo $CMAKE_GPU_OPTIONS
181     - echo $CMAKE_MPI_OPTIONS
182     - echo $CMAKE_PRECISION_OPTIONS
183     - echo $CMAKE_BUILD_TYPE_OPTIONS
184     - echo $CMAKE_GMXAPI_OPTIONS
185     - if [[ -d $RELEASE_BUILD_DIR ]] ; then
186       echo "Cleaning up build directory" ;
187       rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
188       else
189       echo "Preparing new build directory" ;
190       mkdir $RELEASE_BUILD_DIR ;
191       fi
192     - cd $RELEASE_BUILD_DIR
193     - cmake ../$RELEASE_SOURCE/
194       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
195       $CMAKE_COMPILER_SCRIPT
196       $CMAKE_EXTRA_OPTIONS
197       $CMAKE_SIMD_OPTIONS
198       $CMAKE_MPI_OPTIONS
199       $CMAKE_PRECISION_OPTIONS
200       $CMAKE_BUILD_TYPE_OPTIONS
201       $CMAKE_GPU_OPTIONS
202       $CMAKE_GMXAPI_OPTIONS
203       "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
204       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
205       2>&1 | tee cmakeLog.log
206     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
207     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
208     - cd ..
209   artifacts:
210     when: always
211     paths:
212       - $RELEASE_BUILD_DIR
213       - $RELEASE_REGRESSIONTESTS
214       - $RELEASE_SOURCE
215
216 # Templates for configuration stage
217
218 gromacs:gcc-7:configure:
219   extends:
220     - .gromacs:base:configure
221     - .use-gcc7
222     - .rules:not-for-release
223   needs:
224     - job: simple-build
225       artifacts: false
226
227 gromacs:gcc-7:release:configure:
228   extends:
229     - .gromacs:base:release:configure
230     - .use-gcc7
231     - .rules:nightly-only-for-release
232   cache: {}
233   variables:
234     RELEASE_BUILD_DIR: release-builds-gcc
235   dependencies:
236     - archive:package
237     - regressiontests:package
238     - prepare-release-version
239
240 gromacs:gcc-7-simd-sse41:configure:
241   extends:
242     - .gromacs:base:configure
243     - .use-gcc7
244     - .rules:not-for-release
245   needs:
246     - job: simple-build
247       artifacts: false
248   variables:
249     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
250
251 gromacs:gcc-7-double:configure:
252   extends:
253     - .gromacs:base:configure
254     - .use-gcc7
255     - .rules:not-for-release
256   needs:
257     - job: simple-build
258       artifacts: false
259   variables:
260     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
261
262 gromacs:gcc-7-double:release:configure:
263   extends:
264     - .gromacs:base:release:configure
265     - .use-gcc7
266     - .rules:nightly-only-for-release
267   cache: {}
268   variables:
269     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
270     RELEASE_BUILD_DIR: release-builds-gcc
271   dependencies:
272     - archive:package
273     - regressiontests:package
274     - prepare-release-version
275
276 gromacs:gcc-8:configure:
277   extends:
278     - .gromacs:base:configure
279     - .use-gcc8
280     - .rules:not-for-release
281   needs:
282     - job: simple-build
283       artifacts: false
284
285 gromacs:gcc-8:release:configure:
286   extends:
287     - .gromacs:base:release:configure
288     - .use-gcc8
289     - .rules:nightly-only-for-release
290   cache: {}
291   variables:
292     RELEASE_BUILD_DIR: release-builds-gcc
293   dependencies:
294     - archive:package
295     - regressiontests:package
296     - prepare-release-version
297
298 gromacs:gcc-8-cuda-10.2:configure:
299   extends:
300     - .gromacs:base:configure
301     - .use-cuda
302     - .use-gcc8:cuda-10.2
303     - .rules:not-for-release
304   variables:
305     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
306   # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
307   needs:
308     - job: simple-build
309       artifacts: false
310
311 # For version of clang before 7, we need to always provide the full version
312 # Use something like this instead in the download script:
313 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
314 gromacs:clang-6:configure:
315   extends:
316     - .gromacs:base:configure
317     - .use-clang6
318     - .rules:not-for-release
319   needs:
320     - job: simple-build
321       artifacts: false
322   variables:
323     COMPILER_MAJOR_VERSION: "6.0"
324     CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
325
326 gromacs:clang-7:configure:
327   extends:
328     - .gromacs:base:configure
329     - .use-clang7
330     - .rules:not-for-release
331   needs:
332     - job: simple-build
333       artifacts: false
334
335 gromacs:clang-7:release:configure:
336   extends:
337     - .gromacs:base:release:configure
338     - .use-clang7
339     - .rules:nightly-only-for-release
340   cache: {}
341   variables:
342     RELEASE_BUILD_DIR: release-builds-clang
343   dependencies:
344     - archive:package
345     - regressiontests:package
346     - prepare-release-version
347
348 gromacs:clang-8:configure:
349   extends:
350     - .gromacs:base:configure
351     - .use-clang8
352     - .rules:not-for-release
353   needs:
354     - job: simple-build
355       artifacts: false
356
357 gromacs:clang-8:release:configure:
358   extends:
359     - .gromacs:base:release:configure
360     - .use-clang8
361     - .rules:nightly-only-for-release
362   cache: {}
363   variables:
364     RELEASE_BUILD_DIR: release-builds-clang
365   dependencies:
366     - archive:package
367     - regressiontests:package
368     - prepare-release-version
369
370 # Jobs running during build stage
371
372 .gromacs:base:build:
373   # Dockerfiles are from dockerhub, user eriklindahl
374   # image in admin/dockerimages/ci-docs-py27
375   stage: build
376   script:
377     - cd $BUILD_DIR
378     - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
379     - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
380     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
381       | grep -v "CMake" | tee buildErrors.log || true
382     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
383     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
384     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
385     - cd ..
386   artifacts:
387     when: always
388     paths:
389       - $BUILD_DIR
390       - $INSTALL_DIR/
391
392 gromacs:gcc-7:build:
393   extends:
394     - .gromacs:base:build
395     - .use-ccache
396     - .variables:default
397     - .use-gcc7
398     - .rules:not-for-release
399   needs:
400     - job: simple-build
401       artifacts: false
402     - job: gromacs:gcc-7:configure
403       artifacts: true
404
405 gromacs:gcc-7:release:build:
406   extends:
407     - .gromacs:base:build
408     - .use-ccache
409     - .variables:default
410     - .use-gcc7
411     - .rules:nightly-only-for-release
412   stage: release-build
413   variables:
414     BUILD_DIR: release-builds-gcc
415   needs:
416     - job: gromacs:gcc-7:release:configure
417       artifacts: true
418
419 gromacs:gcc-7-simd-sse41:build:
420   extends:
421     - .gromacs:base:build
422     - .use-ccache
423     - .variables:default
424     - .use-gcc7
425     - .rules:not-for-release
426   needs:
427     - job: simple-build
428       artifacts: false
429     - job: gromacs:gcc-7-simd-sse41:configure
430       artifacts: true
431
432 gromacs:gcc-7-double:build:
433   extends:
434     - .gromacs:base:build
435     - .use-ccache
436     - .variables:default
437     - .use-gcc7
438     - .rules:not-for-release
439   needs:
440     - job: simple-build
441       artifacts: false
442     - job: gromacs:gcc-7-double:configure
443       artifacts: true
444
445 gromacs:gcc-7-double:release:build:
446   extends:
447     - .gromacs:base:build
448     - .use-ccache
449     - .variables:default
450     - .use-gcc7
451     - .rules:nightly-only-for-release
452   stage: release-build
453   variables:
454     BUILD_DIR: release-builds-gcc
455   needs:
456     - job: gromacs:gcc-7-double:release:configure
457       artifacts: true
458
459 gromacs:gcc-8:build:
460   extends:
461     - .gromacs:base:build
462     - .use-ccache
463     - .variables:default
464     - .use-gcc8
465     - .rules:not-for-release
466   needs:
467     - job: simple-build
468       artifacts: false
469     - job: gromacs:gcc-8:configure
470       artifacts: true
471
472 gromacs:gcc-8:release:build:
473   extends:
474     - .gromacs:base:build
475     - .use-ccache
476     - .variables:default
477     - .use-gcc8
478     - .rules:nightly-only-for-release
479   stage: release-build
480   variables:
481     BUILD_DIR: release-builds-gcc
482   needs:
483     - job: gromacs:gcc-8:release:configure
484       artifacts: true
485
486 gromacs:gcc-8-cuda-10.2:build:
487   extends:
488     - .gromacs:base:build
489     - .use-ccache
490     - .variables:default
491     - .use-cuda
492     - .use-gcc8:cuda-10.2
493     - .rules:not-for-release
494   variables:
495     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
496   # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
497   needs:
498     - job: simple-build
499       artifacts: false
500     - job: gromacs:gcc-8-cuda-10.2:configure
501       artifacts: true
502
503 gromacs:clang-6:build:
504   extends:
505     - .gromacs:base:build
506     - .use-ccache
507     - .variables:default
508     - .use-clang6
509     - .rules:not-for-release
510   needs:
511     - job: simple-build
512       artifacts: false
513     - job: gromacs:clang-6:configure
514       artifacts: true
515
516 gromacs:clang-7:build:
517   extends:
518     - .gromacs:base:build
519     - .use-ccache
520     - .variables:default
521     - .use-clang7
522     - .rules:not-for-release
523   needs:
524     - job: simple-build
525       artifacts: false
526     - job: gromacs:clang-7:configure
527       artifacts: true
528
529 gromacs:clang-7:release:build:
530   extends:
531     - .gromacs:base:build
532     - .use-ccache
533     - .variables:default
534     - .use-clang7
535     - .rules:nightly-only-for-release
536   stage: release-build
537   variables:
538     BUILD_DIR: release-builds-clang
539   needs:
540     - job: gromacs:clang-7:release:configure
541       artifacts: true
542
543 gromacs:clang-8:build:
544   extends:
545     - .gromacs:base:build
546     - .use-ccache
547     - .variables:default
548     - .use-clang8
549     - .rules:not-for-release
550   needs:
551     - job: simple-build
552       artifacts: false
553     - job: gromacs:clang-8:configure
554       artifacts: true
555
556 gromacs:clang-8:release:build:
557   extends:
558     - .gromacs:base:build
559     - .use-ccache
560     - .variables:default
561     - .use-clang8
562     - .rules:nightly-only-for-release
563   stage: release-build
564   variables:
565     BUILD_DIR: release-builds-clang
566   needs:
567     - job: gromacs:clang-8:release:configure
568       artifacts: true
569
570 # Jobs running during test stage
571
572 .gromacs:base:test:
573   extends:
574     - .variables:default
575   variables:
576     REGRESSIONTEST_TOTAL_RANK_NUMBER: 4
577     REGRESSIONTEST_OMP_RANK_NUMBER: 2
578     REGRESSIONTEST_PME_RANK_NUMBER: 1
579     REGRESSIONTEST_MPI_RUN_COMMAND: ""
580     REGRESSIONTEST_DOUBLE: ""
581   stage: test
582   retry:
583     max: 2
584   script:
585     - cd $BUILD_DIR
586     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
587     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
588       ctestLog.log | tee ctestErrors.log
589     - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
590     - if [ -s ctestErrors.log ] ; then
591       echo "Error during running ctest";
592       exit 1;
593       fi
594     - cd ..
595     - tar xzf gmx-regressiontests.tar.gz
596     - source $INSTALL_DIR/bin/GMXRC
597     - cd regressiontests
598     - echo "perl gmxtest.pl -nt $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND"
599     - perl gmxtest.pl -nt $REGRESSIONTEST_TOTAL_RANK_NUMBER -ntomp $REGRESSIONTEST_OMP_RANK_NUMBER -npme $REGRESSIONTEST_PME_RANK_NUMBER $REGRESSIONTEST_DOUBLE $REGRESSIONTEST_MPI_RUN_COMMAND -xml all
600   artifacts:
601     reports:
602       junit: $BUILD_DIR/JUnitTestResults.xml
603     paths:
604       - $BUILD_DIR/Testing
605       - $BUILD_DIR/tests
606       - regressiontests
607     when: always
608     expire_in: 1 week
609
610 gromacs:gcc-7:test:
611   extends:
612     - .gromacs:base:test
613     - .use-gcc7
614     - .rules:not-for-release
615   needs:
616     - job: simple-build
617       artifacts: false
618     - job: gromacs:gcc-7:build
619     - job: regressiontests:prepare
620
621 gromacs:gcc-7:release:test:
622   extends:
623     - .gromacs:base:test
624     - .use-gcc7
625     - .rules:nightly-only-for-release
626   stage: release-tests
627   variables:
628     BUILD_DIR: release-builds-gcc
629   needs:
630     - job: gromacs:gcc-7:release:configure
631       artifacts: true
632     - job: gromacs:gcc-7:release:build
633       artifacts: true
634     - job: regressiontests:package
635
636 gromacs:gcc-7-simd-sse41:test:
637   extends:
638     - .gromacs:base:test
639     - .use-gcc7
640     - .rules:not-for-release
641   needs:
642     - job: simple-build
643       artifacts: false
644     - job: gromacs:gcc-7-simd-sse41:build
645     - job: regressiontests:prepare
646
647 gromacs:gcc-7-double:test:
648   extends:
649     - .gromacs:base:test
650     - .use-gcc7
651     - .rules:not-for-release
652   variables:
653     REGRESSIONTEST_DOUBLE: "-double"
654   needs:
655     - job: simple-build
656       artifacts: false
657     - job: gromacs:gcc-7-double:build
658     - job: regressiontests:prepare
659
660 gromacs:gcc-7-double:release:test:
661   extends:
662     - .gromacs:base:test
663     - .use-gcc7
664     - .rules:nightly-only-for-release
665   stage: release-tests
666   variables:
667     BUILD_DIR: release-builds-gcc
668   needs:
669     - job: gromacs:gcc-7-double:release:configure
670       artifacts: true
671     - job: gromacs:gcc-7-double:release:build
672       artifacts: true
673     - job: regressiontests:package
674
675 gromacs:gcc-8:test:
676   extends:
677     - .gromacs:base:test
678     - .use-gcc8
679     - .rules:not-for-release
680   needs:
681     - job: simple-build
682       artifacts: false
683     - job: gromacs:gcc-8:build
684     - job: regressiontests:prepare
685
686 gromacs:gcc-8:release:test:
687   extends:
688     - .gromacs:base:test
689     - .use-gcc8
690     - .rules:nightly-only-for-release
691   stage: release-tests
692   variables:
693     BUILD_DIR: release-builds-gcc
694   needs:
695     - job: gromacs:gcc-8:release:configure
696       artifacts: true
697     - job: gromacs:gcc-8:release:build
698       artifacts: true
699     - job: regressiontests:package
700
701 gromacs:gcc-8-cuda-10.2:test:
702   extends:
703     - .gromacs:base:test
704     - .use-cuda
705     - .use-gcc8:cuda-10.2
706     - .rules:not-for-release
707   variables:
708     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
709     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
710     REGRESSIONTEST_PME_RANK_NUMBER: 0
711     REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
712     REGRESSIONTEST_OMP_RANK_NUMBER: 1
713     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
714   # TODO: Enable GMX_PYTHON_PACKAGE when dependencies are in Docker image.
715   needs:
716     - job: simple-build
717       artifacts: false
718     - job: gromacs:gcc-8-cuda-10.2:build
719     - job: regressiontests:prepare
720
721 gromacs:clang-6:test:
722   extends:
723     - .gromacs:base:test
724     - .use-clang6
725     - .rules:not-for-release
726   variables:
727     REGRESSIONTEST_OMP_RANK_NUMBER: 0
728   needs:
729     - job: simple-build
730       artifacts: false
731     - job: gromacs:clang-6:build
732     - job: regressiontests:prepare
733
734 gromacs:clang-7:test:
735   extends:
736     - .gromacs:base:test
737     - .use-clang7
738     - .rules:not-for-release
739   needs:
740     - job: simple-build
741       artifacts: false
742     - job: gromacs:clang-7:build
743     - job: regressiontests:prepare
744
745 gromacs:clang-7:release:test:
746   extends:
747     - .gromacs:base:test
748     - .use-clang7
749     - .rules:nightly-only-for-release
750   stage: release-tests
751   variables:
752     BUILD_DIR: release-builds-clang
753   needs:
754     - job: gromacs:clang-7:release:configure
755       artifacts: true
756     - job: gromacs:clang-7:release:build
757       artifacts: true
758     - job: regressiontests:package
759
760 gromacs:clang-8:test:
761   extends:
762     - .gromacs:base:test
763     - .use-clang8
764     - .rules:not-for-release
765   needs:
766     - job: simple-build
767       artifacts: false
768     - job: gromacs:clang-8:build
769     - job: regressiontests:prepare
770
771 gromacs:clang-8:release:test:
772   extends:
773     - .gromacs:base:test
774     - .use-clang8
775     - .rules:nightly-only-for-release
776   stage: release-tests
777   variables:
778     BUILD_DIR: release-builds-clang
779   needs:
780     - job: gromacs:clang-8:release:configure
781       artifacts: true
782     - job: gromacs:clang-8:release:build
783       artifacts: true
784     - job: regressiontests:package