Remove some unnecessary indirection in job definitions.
[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   stage: pre-build
10   variables:
11     KUBERNETES_CPU_LIMIT: 8
12     KUBERNETES_CPU_REQUEST: 4
13     KUBERNETES_MEMORY_LIMIT: 8Gi
14     CMAKE_COMPILER_SCRIPT: ""
15     CMAKE_EXTRA_OPTIONS: ""
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     BUILD_DIR: simple-build
23   except:
24     variables:
25       - $GROMACS_RELEASE
26   script:
27     - echo $CMAKE_COMPILER_SCRIPT
28     - echo $CMAKE_EXTRA_OPTIONS
29     - echo $CMAKE_SIMD_OPTIONS
30     - echo $CMAKE_GPU_OPTIONS
31     - echo $CMAKE_MPI_OPTIONS
32     - echo $CMAKE_PRECISION_OPTIONS
33     - echo $CMAKE_BUILD_TYPE_OPTIONS
34     - echo $CMAKE_GMXAPI_OPTIONS
35     - if [[ -d $BUILD_DIR ]] ; then
36       echo "Cleaning up build directory" ;
37       rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
38       else
39       echo "Preparing new build directory" ;
40       mkdir $BUILD_DIR ;
41       fi
42     - cd $BUILD_DIR
43     - cmake ..
44       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
45       $CMAKE_COMPILER_SCRIPT
46       $CMAKE_EXTRA_OPTIONS
47       $CMAKE_SIMD_OPTIONS
48       $CMAKE_MPI_OPTIONS
49       $CMAKE_PRECISION_OPTIONS
50       $CMAKE_BUILD_TYPE_OPTIONS
51       $CMAKE_GPU_OPTIONS
52       $CMAKE_GMXAPI_OPTIONS
53       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
54       2>&1 | tee cmakeLog.log
55     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
56     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
57     - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
58     - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
59     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
60       | grep -v "CMake" | tee buildErrors.log || true
61     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
62     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
63     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
64     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
65     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
66       ctestLog.log | tee ctestErrors.log
67     - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
68     - if [ -s ctestErrors.log ] ; then
69       echo "Error during running ctest";
70       exit 1;
71       fi
72     - cd ..
73   artifacts:
74     reports:
75       junit: $BUILD_DIR/JUnitTestResults.xml
76     paths:
77       - $BUILD_DIR/*log
78     when: always
79     expire_in: 1 week
80
81 # Jobs running in first pre-build stage
82
83 .gromacs:base:configure:
84   extends:
85     - .variables:default
86   cache: {}
87   stage: configure-build
88   variables:
89     KUBERNETES_CPU_LIMIT: 1
90     KUBERNETES_CPU_REQUEST: 1
91     KUBERNETES_MEMORY_LIMIT: 2Gi
92     CMAKE_COMPILER_SCRIPT: ""
93     CMAKE_EXTRA_OPTIONS: ""
94     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
95     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
96     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
97     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
98     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
99     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
100   script:
101     - echo $CMAKE_COMPILER_SCRIPT
102     - echo $CMAKE_EXTRA_OPTIONS
103     - echo $CMAKE_SIMD_OPTIONS
104     - echo $CMAKE_GPU_OPTIONS
105     - echo $CMAKE_MPI_OPTIONS
106     - echo $CMAKE_PRECISION_OPTIONS
107     - echo $CMAKE_BUILD_TYPE_OPTIONS
108     - echo $CMAKE_GMXAPI_OPTIONS
109     - if [[ -d $BUILD_DIR ]] ; then
110       rm -rf $BUILD_DIR && mkdir $BUILD_DIR ;
111       else
112       echo "Preparing new build directory" ;
113       mkdir $BUILD_DIR ;
114       fi
115     - cd $BUILD_DIR
116     - cmake ..
117       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
118       $CMAKE_COMPILER_SCRIPT
119       $CMAKE_EXTRA_OPTIONS
120       $CMAKE_SIMD_OPTIONS
121       $CMAKE_MPI_OPTIONS
122       $CMAKE_PRECISION_OPTIONS
123       $CMAKE_BUILD_TYPE_OPTIONS
124       $CMAKE_GPU_OPTIONS
125       $CMAKE_GMXAPI_OPTIONS
126       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
127       2>&1 | tee cmakeLog.log
128     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
129     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
130     - cd ..
131   artifacts:
132     when: always
133     paths:
134       - $BUILD_DIR
135
136 .gromacs:base:release:configure:
137   extends:
138     - .variables:default
139   cache: {}
140   stage: release-configure
141   variables:
142     KUBERNETES_CPU_LIMIT: 1
143     KUBERNETES_CPU_REQUEST: 1
144     KUBERNETES_MEMORY_LIMIT: 2Gi
145     CMAKE_COMPILER_SCRIPT: ""
146     CMAKE_EXTRA_OPTIONS: ""
147     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AUTO"
148     CMAKE_MPI_OPTIONS: "-DGMX_THREAD_MPI=ON"
149     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF"
150     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
151     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
152     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
153     RELEASE_BUILD_DIR: release-builds
154     RELEASE_SOURCE: release-source-from-tarball
155     RELEASE_REGRESSIONTESTS: release-regressiontests-from-tarball
156   only:
157     refs:
158       - web
159       - schedules
160       - triggers
161     variables:
162       - $GROMACS_RELEASE
163   script:
164     - VERSION=`cat version.json |
165       python3 -c "import json,sys; print(json.load(sys.stdin)['version'])"`
166     - if [[ $GROMACS_RELEASE != "true" ]] ; then
167       VERSION=$VERSION-dev ;
168       fi
169     - SOURCENAME=gromacs-$VERSION
170     - SOURCETARBALL=$SOURCENAME.tar.gz
171     - REGTESTNAME=regressiontests-$VERSION
172     - REGTESTTARBALL=$REGTESTNAME.tar.gz
173     - echo "$SOURCETARBALL"
174     - echo "$REGTESTTARBALL"
175     - RELEASE_TARBALLS=release-tarballs
176     - rm -rf $RELEASE_TARBALLS $RELEASE_SOURCE $RELEASE_REGRESSIONTESTS && mkdir $RELEASE_TARBALLS
177     - mv $SOURCETARBALL $RELEASE_TARBALLS
178     - mv $REGTESTTARBALL $RELEASE_TARBALLS
179     - cd $RELEASE_TARBALLS
180     # We rename the source and regressiontest directories
181     # to have names for them that don't change for different versions.
182     - tar -xf $SOURCETARBALL
183     - mv $SOURCENAME ../$RELEASE_SOURCE
184     - tar -xf $REGTESTTARBALL
185     - mv $REGTESTNAME ../$RELEASE_REGRESSIONTESTS
186     - rm $SOURCETARBALL $REGTESTTARBALL
187     - cd ..
188     - echo $CMAKE_COMPILER_SCRIPT
189     - echo $CMAKE_EXTRA_OPTIONS
190     - echo $CMAKE_SIMD_OPTIONS
191     - echo $CMAKE_GPU_OPTIONS
192     - echo $CMAKE_MPI_OPTIONS
193     - echo $CMAKE_PRECISION_OPTIONS
194     - echo $CMAKE_BUILD_TYPE_OPTIONS
195     - echo $CMAKE_GMXAPI_OPTIONS
196     - if [[ -d $RELEASE_BUILD_DIR ]] ; then
197       echo "Cleaning up build directory" ;
198       rm -rf $RELEASE_BUILD_DIR && mkdir $RELEASE_BUILD_DIR ;
199       else
200       echo "Preparing new build directory" ;
201       mkdir $RELEASE_BUILD_DIR ;
202       fi
203     - cd $RELEASE_BUILD_DIR
204     - cmake ../$RELEASE_SOURCE/
205       -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
206       $CMAKE_COMPILER_SCRIPT
207       $CMAKE_EXTRA_OPTIONS
208       $CMAKE_SIMD_OPTIONS
209       $CMAKE_MPI_OPTIONS
210       $CMAKE_PRECISION_OPTIONS
211       $CMAKE_BUILD_TYPE_OPTIONS
212       $CMAKE_GPU_OPTIONS
213       $CMAKE_GMXAPI_OPTIONS
214       "-DREGRESSIONTEST_PATH=../$RELEASE_REGRESSIONTESTS"
215       -DCMAKE_INSTALL_PREFIX=../$INSTALL_DIR -DGMX_COMPILER_WARNINGS=ON
216       2>&1 | tee cmakeLog.log
217     - awk '/CMake Warning/,/^--|^$/' cmakeLog.log | tee cmakeErrors.log
218     - if [ -s cmakeErrors.log  ] ; then echo "Found CMake warning while processing build"; cat cmakeErrors.log ; exit 1; fi
219     - cd ..
220   artifacts:
221     when: always
222     paths:
223       - $RELEASE_BUILD_DIR
224       - $RELEASE_REGRESSIONTESTS
225       - $RELEASE_SOURCE
226
227 # Templates for configuration stage
228
229 gromacs:gcc-7:configure:
230   extends:
231     - .gromacs:base:configure
232     - .use-gcc7
233   needs:
234     - job: simple-build
235       artifacts: false
236   except:
237     variables:
238       - $GROMACS_RELEASE
239
240 gromacs:gcc-7:release:configure:
241   extends:
242     - .gromacs:base:release:configure
243     - .use-gcc7
244   cache: {}
245   variables:
246     RELEASE_BUILD_DIR: release-builds-gcc
247   only:
248     refs:
249       - web
250       - schedules
251       - triggers
252     variables:
253       - $GROMACS_RELEASE
254   dependencies:
255     - package-archive-release
256     - package-regressiontests-release
257     - prepare-release-version
258
259 gromacs:gcc-7-simd-sse41:configure:
260   extends:
261     - .gromacs:base:configure
262     - .use-gcc7
263   needs:
264     - job: simple-build
265       artifacts: false
266   variables:
267     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
268   except:
269     variables:
270       - $GROMACS_RELEASE
271
272 gromacs:gcc-7-double:configure:
273   extends:
274     - .gromacs:base:configure
275     - .use-gcc7
276   needs:
277     - job: simple-build
278       artifacts: false
279   variables:
280     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
281   except:
282     variables:
283       - $GROMACS_RELEASE
284
285 gromacs:gcc-7-double:release:configure:
286   extends:
287     - .gromacs:base:release:configure
288     - .use-gcc7
289   cache: {}
290   variables:
291     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
292     RELEASE_BUILD_DIR: release-builds-gcc
293   only:
294     refs:
295       - web
296       - schedules
297       - triggers
298     variables:
299       - $GROMACS_RELEASE
300   dependencies:
301     - package-archive-release
302     - package-regressiontests-release
303     - prepare-release-version
304
305 gromacs:gcc-7:configure-gmxapi:
306   extends:
307     - .gromacs:base:configure
308     - .configure-gmxapi-template
309     - .use-gcc7
310   needs:
311     - job: simple-build
312       artifacts: false
313   except:
314     variables:
315       - $GROMACS_RELEASE
316
317 gromacs:gcc-7:release:configure-gmxapi:
318   extends:
319     - .gromacs:base:release:configure
320     - .configure-gmxapi-template
321     - .use-gcc7
322   cache: {}
323   variables:
324     RELEASE_BUILD_DIR: release-builds-gcc
325   only:
326     refs:
327       - web
328       - schedules
329       - triggers
330     variables:
331       - $GROMACS_RELEASE
332   dependencies:
333     - package-archive-release
334     - package-regressiontests-release
335     - prepare-release-version
336
337 gromacs:gcc-8:configure:
338   extends:
339     - .gromacs:base:configure
340     - .use-gcc8
341   needs:
342     - job: simple-build
343       artifacts: false
344   except:
345     variables:
346       - $GROMACS_RELEASE
347
348 gromacs:gcc-8:release:configure:
349   extends:
350     - .gromacs:base:release:configure
351     - .use-gcc8
352   cache: {}
353   variables:
354     RELEASE_BUILD_DIR: release-builds-gcc
355   only:
356     refs:
357       - web
358       - schedules
359       - triggers
360     variables:
361       - $GROMACS_RELEASE
362   dependencies:
363     - package-archive-release
364     - package-regressiontests-release
365     - prepare-release-version
366
367 gromacs:gcc-8-cuda-10.2:configure:
368   extends:
369     - .gromacs:base:configure
370     - .use-cuda
371     - .use-gcc8:cuda-10.2
372   needs:
373     - job: simple-build
374       artifacts: false
375   except:
376     variables:
377       - $GROMACS_RELEASE
378
379 # For version of clang before 7, we need to always provide the full version
380 # Use something like this instead in the download script:
381 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
382 gromacs:clang-6:configure:
383   extends:
384     - .gromacs:base:configure
385     - .use-clang6
386   needs:
387     - job: simple-build
388       artifacts: false
389   variables:
390     COMPILER_MAJOR_VERSION: "6.0"
391     CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
392   except:
393     variables:
394       - $GROMACS_RELEASE
395
396 gromacs:clang-7:configure:
397   extends:
398     - .gromacs:base:configure
399     - .use-clang7
400   needs:
401     - job: simple-build
402       artifacts: false
403   except:
404     variables:
405       - $GROMACS_RELEASE
406
407 gromacs:clang-7:release:configure:
408   extends:
409     - .gromacs:base:release:configure
410     - .use-clang7
411   cache: {}
412   variables:
413     RELEASE_BUILD_DIR: release-builds-clang
414   only:
415     refs:
416       - web
417       - schedules
418       - triggers
419     variables:
420       - $GROMACS_RELEASE
421   dependencies:
422     - package-archive-release
423     - package-regressiontests-release
424     - prepare-release-version
425
426 gromacs:clang-7:configure-gmxapi:
427   extends:
428     - .gromacs:base:configure
429     - .configure-gmxapi-template
430     - .use-clang7
431   needs:
432     - job: simple-build
433       artifacts: false
434   except:
435     variables:
436       - $GROMACS_RELEASE
437
438 gromacs:clang-7:release:configure-gmxapi:
439   extends:
440     - .gromacs:base:release:configure
441     - .configure-gmxapi-template
442     - .use-clang7
443   cache: {}
444   variables:
445     RELEASE_BUILD_DIR: release-builds-clang
446   only:
447     refs:
448       - web
449       - schedules
450       - triggers
451     variables:
452       - $GROMACS_RELEASE
453   dependencies:
454     - package-archive-release
455     - package-regressiontests-release
456     - prepare-release-version
457
458 gromacs:clang-8:configure:
459   extends:
460     - .gromacs:base:configure
461     - .use-clang8
462   needs:
463     - job: simple-build
464       artifacts: false
465   except:
466     variables:
467       - $GROMACS_RELEASE
468
469 gromacs:clang-8:release:configure:
470   extends:
471     - .gromacs:base:release:configure
472     - .use-clang8
473   cache: {}
474   variables:
475     RELEASE_BUILD_DIR: release-builds-clang
476   only:
477     refs:
478       - web
479       - schedules
480       - triggers
481     variables:
482       - $GROMACS_RELEASE
483   dependencies:
484     - package-archive-release
485     - package-regressiontests-release
486     - prepare-release-version
487
488 # Jobs running during build stage
489
490 .gromacs:base:build:
491   # Dockerfiles are from dockerhub, user eriklindahl
492   # image in admin/dockerimages/ci-docs-py27
493   stage: build
494   script:
495     - cd $BUILD_DIR
496     - cmake --build . -- -j8 2>&1 | tee buildLogFile.log
497     - cmake --build . --target tests -- -j8 2>&1 | tee testBuildLogFile.log
498     - awk '/warning/,/warning.*generated|^$/' buildLogFile.log testBuildLogFile.log
499       | grep -v "CMake" | tee buildErrors.log || true
500     - grep "cannot be built" buildLogFile.log testBuildLogFile.log | tee -a buildErrors.log || true
501     - cmake --build . --target install 2>&1 | tee installBuildLogFile.log
502     - if [ -s buildErrors.log ] ; then echo "Found compiler warning during build"; cat buildErrors.log; exit 1; fi
503     - cd ..
504   artifacts:
505     when: always
506     paths:
507       - $BUILD_DIR
508       - $INSTALL_DIR/
509
510 gromacs:gcc-7:build:
511   extends:
512     - .gromacs:base:build
513     - .use-ccache
514     - .variables:default
515     - .use-gcc7
516   needs:
517     - job: simple-build
518       artifacts: false
519     - job: gromacs:gcc-7:configure
520       artifacts: true
521   except:
522     variables:
523       - $GROMACS_RELEASE
524
525 gromacs:gcc-7:release:build:
526   extends:
527     - .gromacs:base:build
528     - .use-ccache
529     - .variables:default
530     - .use-gcc7
531   stage: release-build
532   variables:
533     BUILD_DIR: release-builds-gcc
534   needs:
535     - job: gromacs:gcc-7:release:configure
536       artifacts: true
537   only:
538     refs:
539       - web
540       - schedules
541       - triggers
542     variables:
543       - $GROMACS_RELEASE
544
545 gromacs:gcc-7-simd-sse41:build:
546   extends:
547     - .gromacs:base:build
548     - .use-ccache
549     - .variables:default
550     - .use-gcc7
551   needs:
552     - job: simple-build
553       artifacts: false
554     - job: gromacs:gcc-7-simd-sse41:configure
555       artifacts: true
556   except:
557     variables:
558       - $GROMACS_RELEASE
559
560 gromacs:gcc-7-double:build:
561   extends:
562     - .gromacs:base:build
563     - .use-ccache
564     - .variables:default
565     - .use-gcc7
566   needs:
567     - job: simple-build
568       artifacts: false
569     - job: gromacs:gcc-7-double:configure
570       artifacts: true
571   except:
572     variables:
573       - $GROMACS_RELEASE
574
575 gromacs:gcc-7:build-gmxapi:
576   extends:
577     - .gromacs:base:build
578     - .use-ccache
579     - .variables:default
580     - .gmxapi-extra-installs
581     - .use-gcc7
582   needs:
583     - job: simple-build
584       artifacts: false
585     - job: gromacs:gcc-7:configure-gmxapi
586       artifacts: true
587   except:
588     variables:
589       - $GROMACS_RELEASE
590
591 gromacs:gcc-7-double:release:build:
592   extends:
593     - .gromacs:base:build
594     - .use-ccache
595     - .variables:default
596     - .use-gcc7
597   stage: release-build
598   variables:
599     BUILD_DIR: release-builds-gcc
600   needs:
601     - job: gromacs:gcc-7-double:release:configure
602       artifacts: true
603   only:
604     refs:
605       - web
606       - schedules
607       - triggers
608     variables:
609       - $GROMACS_RELEASE
610
611 gromacs:gcc-7:release:build-gmxapi:
612   extends:
613     - .gromacs:base:build
614     - .use-ccache
615     - .variables:default
616     - .gmxapi-extra-installs
617     - .use-gcc7
618   stage: release-build
619   variables:
620     BUILD_DIR: release-builds-gcc
621   needs:
622     - job: gromacs:gcc-7:release:configure-gmxapi
623       artifacts: true
624   only:
625     refs:
626       - web
627       - schedules
628       - triggers
629     variables:
630       - $GROMACS_RELEASE
631
632 gromacs:gcc-8:build:
633   extends:
634     - .gromacs:base:build
635     - .use-ccache
636     - .variables:default
637     - .use-gcc8
638   needs:
639     - job: simple-build
640       artifacts: false
641     - job: gromacs:gcc-8:configure
642       artifacts: true
643   except:
644     variables:
645       - $GROMACS_RELEASE
646
647 gromacs:gcc-8:release:build:
648   extends:
649     - .gromacs:base:build
650     - .use-ccache
651     - .variables:default
652     - .use-gcc8
653   stage: release-build
654   variables:
655     BUILD_DIR: release-builds-gcc
656   needs:
657     - job: gromacs:gcc-8:release:configure
658       artifacts: true
659   only:
660     refs:
661       - web
662       - schedules
663       - triggers
664     variables:
665       - $GROMACS_RELEASE
666
667 gromacs:gcc-8-cuda-10.2:build:
668   extends:
669     - .gromacs:base:build
670     - .use-ccache
671     - .variables:default
672     - .use-cuda
673     - .use-gcc8:cuda-10.2
674   needs:
675     - job: simple-build
676       artifacts: false
677     - job: gromacs:gcc-8-cuda-10.2:configure
678       artifacts: true
679   except:
680     variables:
681       - $GROMACS_RELEASE
682
683 gromacs:clang-6:build:
684   extends:
685     - .gromacs:base:build
686     - .use-ccache
687     - .variables:default
688     - .use-clang6
689   needs:
690     - job: simple-build
691       artifacts: false
692     - job: gromacs:clang-6:configure
693       artifacts: true
694   except:
695     variables:
696       - $GROMACS_RELEASE
697
698 gromacs:clang-7:build:
699   extends:
700     - .gromacs:base:build
701     - .use-ccache
702     - .variables:default
703     - .use-clang7
704   needs:
705     - job: simple-build
706       artifacts: false
707     - job: gromacs:clang-7:configure
708       artifacts: true
709   except:
710     variables:
711       - $GROMACS_RELEASE
712
713 gromacs:clang-7:release:build:
714   extends:
715     - .gromacs:base:build
716     - .use-ccache
717     - .variables:default
718     - .use-clang7
719   stage: release-build
720   variables:
721     BUILD_DIR: release-builds-clang
722   needs:
723     - job: gromacs:clang-7:release:configure
724       artifacts: true
725   only:
726     refs:
727       - web
728       - schedules
729       - triggers
730     variables:
731       - $GROMACS_RELEASE
732
733 gromacs:clang-7:build-gmxapi:
734   extends:
735     - .gromacs:base:build
736     - .use-ccache
737     - .variables:default
738     - .gmxapi-extra-installs
739     - .use-clang7
740   needs:
741     - job: simple-build
742       artifacts: false
743     - job: gromacs:clang-7:configure-gmxapi
744       artifacts: true
745   except:
746     variables:
747       - $GROMACS_RELEASE
748
749 gromacs:clang-7:release:build-gmxapi:
750   extends:
751     - .gromacs:base:build
752     - .use-ccache
753     - .variables:default
754     - .gmxapi-extra-installs
755     - .use-clang7
756   stage: release-build
757   variables:
758     BUILD_DIR: release-builds-clang
759   needs:
760     - job: gromacs:clang-7:release:configure-gmxapi
761       artifacts: true
762   only:
763     refs:
764       - web
765       - schedules
766       - triggers
767     variables:
768       - $GROMACS_RELEASE
769
770 gromacs:clang-8:build:
771   extends:
772     - .gromacs:base:build
773     - .use-ccache
774     - .variables:default
775     - .use-clang8
776   needs:
777     - job: simple-build
778       artifacts: false
779     - job: gromacs:clang-8:configure
780       artifacts: true
781   except:
782     variables:
783       - $GROMACS_RELEASE
784
785 gromacs:clang-8:release:build:
786   extends:
787     - .gromacs:base:build
788     - .use-ccache
789     - .variables:default
790     - .use-clang8
791   stage: release-build
792   variables:
793     BUILD_DIR: release-builds-clang
794   needs:
795     - job: gromacs:clang-8:release:configure
796       artifacts: true
797   only:
798     refs:
799       - web
800       - schedules
801       - triggers
802     variables:
803       - $GROMACS_RELEASE
804
805
806 # Jobs running during test stage
807
808 .gromacs:base:test:
809   stage: test
810   retry:
811     max: 2
812   extends:
813     - .variables:default
814   script:
815     - cd $BUILD_DIR
816     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
817     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
818       ctestLog.log | tee ctestErrors.log
819     - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
820     - if [ -s ctestErrors.log ] ; then
821       echo "Error during running ctest";
822       exit 1;
823       fi
824     - cd ..
825   artifacts:
826     reports:
827       junit: $BUILD_DIR/JUnitTestResults.xml
828     paths:
829       - $BUILD_DIR/Testing
830       - $BUILD_DIR/tests
831     when: always
832     expire_in: 1 week
833
834 gromacs:gcc-7:test:
835   extends:
836     - .gromacs:base:test
837     - .use-gcc7
838   needs:
839     - job: simple-build
840       artifacts: false
841     - job: gromacs:gcc-7:build
842   except:
843     variables:
844       - $GROMACS_RELEASE
845
846 gromacs:gcc-7:release:test:
847   extends:
848     - .gromacs:base:test
849     - .use-gcc7
850   stage: release-tests
851   variables:
852     BUILD_DIR: release-builds-gcc
853   needs:
854     - job: gromacs:gcc-7:release:configure
855       artifacts: true
856     - job: gromacs:gcc-7:release:build
857       artifacts: true
858   only:
859     refs:
860       - triggers
861       - web
862       - schedules
863     variables:
864       - $GROMACS_RELEASE
865
866 gromacs:gcc-7-simd-sse41:test:
867   extends:
868     - .gromacs:base:test
869     - .use-gcc7
870   needs:
871     - job: simple-build
872       artifacts: false
873     - job: gromacs:gcc-7-simd-sse41:build
874   except:
875     variables:
876       - $GROMACS_RELEASE
877
878 gromacs:gcc-7-double:test:
879   extends:
880     - .gromacs:base:test
881     - .use-gcc7
882   needs:
883     - job: simple-build
884       artifacts: false
885     - job: gromacs:gcc-7-double:build
886   except:
887     variables:
888       - $GROMACS_RELEASE
889
890 gromacs:gcc-7-double:release:test:
891   extends:
892     - .gromacs:base:test
893     - .use-gcc7
894   stage: release-tests
895   variables:
896     BUILD_DIR: release-builds-gcc
897   needs:
898     - job: gromacs:gcc-7-double:release:configure
899       artifacts: true
900     - job: gromacs:gcc-7-double:release:build
901       artifacts: true
902   only:
903     refs:
904       - triggers
905       - web
906       - schedules
907     variables:
908       - $GROMACS_RELEASE
909
910 gromacs:gcc-7:test-gmxapi:
911   extends:
912     - .gromacs:base:test
913     - .gmxapi-extra-installs
914     - .use-gcc7
915   needs:
916     - job: simple-build
917       artifacts: false
918     - job: gromacs:gcc-7:build-gmxapi
919   except:
920     variables:
921       - $GROMACS_RELEASE
922
923 gromacs:gcc-7:release:test-gmxapi:
924   extends:
925     - .gromacs:base:test
926     - .gmxapi-extra-installs
927     - .use-gcc7
928   stage: release-tests
929   variables:
930     BUILD_DIR: release-builds-gcc
931   needs:
932     - job: gromacs:gcc-7:release:configure-gmxapi
933       artifacts: true
934     - job: gromacs:gcc-7:release:build-gmxapi
935       artifacts: true
936   only:
937     refs:
938       - triggers
939       - web
940       - schedules
941     variables:
942       - $GROMACS_RELEASE
943
944 gromacs:gcc-8:test:
945   extends:
946     - .gromacs:base:test
947     - .use-gcc8
948   needs:
949     - job: simple-build
950       artifacts: false
951     - job: gromacs:gcc-8:build
952   except:
953     variables:
954       - $GROMACS_RELEASE
955
956 gromacs:gcc-8:release:test:
957   extends:
958     - .gromacs:base:test
959     - .use-gcc8
960   stage: release-tests
961   variables:
962     BUILD_DIR: release-builds-gcc
963   needs:
964     - job: gromacs:gcc-8:release:configure
965       artifacts: true
966     - job: gromacs:gcc-8:release:build
967       artifacts: true
968   only:
969     refs:
970       - triggers
971       - web
972       - schedules
973     variables:
974       - $GROMACS_RELEASE
975
976 gromacs:gcc-8-cuda-10.2:test:
977   variables:
978     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
979     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
980   extends:
981     - .gromacs:base:test
982     - .use-cuda
983     - .use-gcc8:cuda-10.2
984   needs:
985     - job: simple-build
986       artifacts: false
987     - job: gromacs:gcc-8-cuda-10.2:build
988   except:
989     variables:
990       - $GROMACS_RELEASE
991
992 gromacs:clang-6:test:
993   extends:
994     - .gromacs:base:test
995     - .use-clang6
996   needs:
997     - job: simple-build
998       artifacts: false
999     - job: gromacs:clang-6:build
1000   except:
1001     variables:
1002       - $GROMACS_RELEASE
1003
1004 gromacs:clang-7:test:
1005   extends:
1006     - .gromacs:base:test
1007     - .use-clang7
1008   needs:
1009     - job: simple-build
1010       artifacts: false
1011     - job: gromacs:clang-7:build
1012   except:
1013     variables:
1014       - $GROMACS_RELEASE
1015
1016 gromacs:clang-7:release:test:
1017   extends:
1018     - .gromacs:base:test
1019     - .use-clang7
1020   stage: release-tests
1021   variables:
1022     BUILD_DIR: release-builds-clang
1023   needs:
1024     - job: gromacs:clang-7:release:configure
1025       artifacts: true
1026     - job: gromacs:clang-7:release:build
1027       artifacts: true
1028   only:
1029     refs:
1030       - triggers
1031       - web
1032       - schedules
1033     variables:
1034       - $GROMACS_RELEASE
1035
1036 gromacs:clang-7:test-gmxapi:
1037   extends:
1038     - .gromacs:base:test
1039     - .gmxapi-extra-installs
1040     - .use-clang7
1041   needs:
1042     - job: simple-build
1043       artifacts: false
1044     - job: gromacs:clang-7:build-gmxapi
1045   except:
1046     variables:
1047       - $GROMACS_RELEASE
1048
1049 gromacs:clang-7:release:test-gmxapi:
1050   extends:
1051     - .gromacs:base:test
1052     - .gmxapi-extra-installs
1053     - .use-clang7
1054   stage: release-tests
1055   variables:
1056     BUILD_DIR: release-builds-clang
1057   needs:
1058     - job: gromacs:clang-7:release:configure-gmxapi
1059       artifacts: true
1060     - job: gromacs:clang-7:release:build-gmxapi
1061       artifacts: true
1062   only:
1063     refs:
1064       - triggers
1065       - web
1066       - schedules
1067     variables:
1068       - $GROMACS_RELEASE
1069
1070 gromacs:clang-8:test:
1071   extends:
1072     - .gromacs:base:test
1073     - .use-clang8
1074   needs:
1075     - job: simple-build
1076       artifacts: false
1077     - job: gromacs:clang-8:build
1078   except:
1079     variables:
1080       - $GROMACS_RELEASE
1081
1082 gromacs:clang-8:release:test:
1083   extends:
1084     - .gromacs:base:test
1085     - .use-clang8
1086   stage: release-tests
1087   variables:
1088     BUILD_DIR: release-builds-clang
1089   needs:
1090     - job: gromacs:clang-8:release:configure
1091       artifacts: true
1092     - job: gromacs:clang-8:release:build
1093       artifacts: true
1094   only:
1095     refs:
1096       - triggers
1097       - web
1098       - schedules
1099     variables:
1100       - $GROMACS_RELEASE