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