d86d464b409069ec95cfff0e3bb5f1f8d0b48c13
[alexxy/gromacs.git] / admin / gitlab-ci / testing-matrix.gitlab-ci.yml
1 # Initial build that always needs to pass before follow-up stages run
2 simple-build:
3   extends:
4     - .simple-build-template
5     - .build-cache-template
6     - .variables:default
7     - .gcc-before-script-template
8     - .build-gcc-template
9     - .gcc7-template
10   variables:
11     COMPILER_MAJOR_VERSION: 7
12     BUILD_DIR: simple-build
13   except:
14     variables:
15       - $GROMACS_RELEASE
16
17 # Jobs running in first pre-build stage
18
19 .configure-extends-template:
20   extends:
21     - .configure-build-template
22     - .no-cache-template
23     - .variables:default
24
25 .configure-release-extends-template:
26   extends:
27     - .configure-build-release-template
28     - .no-cache-template
29     - .variables:default
30
31 # Templates for configuration stage
32 .configure-gcc:
33   extends:
34     - .configure-extends-template
35     - .gcc-before-script-template
36     - .build-gcc-template
37
38 .configure-gcc-release:
39   extends:
40     - .configure-release-extends-template
41     - .gcc-before-script-template
42     - .build-gcc-template
43
44 .configure-gcc-cuda:
45   extends:
46     - .configure-gcc
47     - .cuda-template
48
49 configure-gcc-7:
50   extends:
51     - .configure-gcc
52     - .gcc7-template
53   needs:
54     - job: simple-build
55       artifacts: false
56   variables:
57     COMPILER_MAJOR_VERSION: 7
58   except:
59     variables:
60       - $GROMACS_RELEASE
61
62 configure-gcc-7-release:
63   extends:
64     - .configure-gcc-release
65     - .no-cache-template
66     - .gcc7-template
67   variables:
68     COMPILER_MAJOR_VERSION: 7
69     RELEASE_BUILD_DIR: release-builds-gcc
70   only:
71     refs:
72       - web
73       - schedules
74       - triggers
75     variables:
76       - $GROMACS_RELEASE
77   dependencies:
78     - package-archive-release
79     - package-regressiontests-release
80     - prepare-release-version
81
82 configure-gcc-7-simd-sse41:
83   extends:
84     - .configure-gcc
85     - .gcc7-template
86   needs:
87     - job: simple-build
88       artifacts: false
89   variables:
90     COMPILER_MAJOR_VERSION: 7
91     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
92   except:
93     variables:
94       - $GROMACS_RELEASE
95
96 configure-gcc-7-double:
97   extends:
98     - .configure-gcc
99     - .gcc7-template
100   needs:
101     - job: simple-build
102       artifacts: false
103   variables:
104     COMPILER_MAJOR_VERSION: 7
105     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
106   except:
107     variables:
108       - $GROMACS_RELEASE
109
110 configure-gcc-7-double-release:
111   extends:
112     - .configure-gcc-release
113     - .no-cache-template
114     - .gcc7-template
115   variables:
116     COMPILER_MAJOR_VERSION: 7
117     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
118     RELEASE_BUILD_DIR: release-builds-gcc
119   only:
120     refs:
121       - web
122       - schedules
123       - triggers
124     variables:
125       - $GROMACS_RELEASE
126   dependencies:
127     - package-archive-release
128     - package-regressiontests-release
129     - prepare-release-version
130
131 configure-gcc-7-gmxapi:
132   extends:
133     - .configure-gcc
134     - .configure-gmxapi-template
135     - .gcc7-template
136   needs:
137     - job: simple-build
138       artifacts: false
139   variables:
140     COMPILER_MAJOR_VERSION: 7
141   except:
142     variables:
143       - $GROMACS_RELEASE
144
145 configure-gcc-7-gmxapi-release:
146   extends:
147     - .configure-gcc-release
148     - .configure-gmxapi-template
149     - .no-cache-template
150     - .gcc7-template
151   variables:
152     COMPILER_MAJOR_VERSION: 7
153     RELEASE_BUILD_DIR: release-builds-gcc
154   only:
155     refs:
156       - web
157       - schedules
158       - triggers
159     variables:
160       - $GROMACS_RELEASE
161   dependencies:
162     - package-archive-release
163     - package-regressiontests-release
164     - prepare-release-version
165
166 configure-gcc-8:
167   extends:
168     - .configure-gcc
169     - .gcc8-template
170   needs:
171     - job: simple-build
172       artifacts: false
173   variables:
174     COMPILER_MAJOR_VERSION: 8
175   except:
176     variables:
177       - $GROMACS_RELEASE
178
179 configure-gcc-8-release:
180   extends:
181     - .configure-gcc-release
182     - .no-cache-template
183     - .gcc8-template
184   variables:
185     COMPILER_MAJOR_VERSION: 8
186     RELEASE_BUILD_DIR: release-builds-gcc
187   only:
188     refs:
189       - web
190       - schedules
191       - triggers
192     variables:
193       - $GROMACS_RELEASE
194   dependencies:
195     - package-archive-release
196     - package-regressiontests-release
197     - prepare-release-version
198
199 configure-gcc-8-cuda-10.2:
200   extends:
201     - .configure-gcc-cuda
202     - .gcc-8-cuda-10.2-template
203   needs:
204     - job: simple-build
205       artifacts: false
206   except:
207     variables:
208       - $GROMACS_RELEASE
209
210 .configure-clang:
211   extends:
212     - .configure-extends-template
213     - .clang-before-script-template
214     - .build-clang-template
215
216 .configure-clang-release:
217   extends:
218     - .configure-release-extends-template
219     - .clang-before-script-template
220     - .build-clang-template
221
222 # For version of clang before 7, we need to always provide the full version
223 # Use something like this instead in the download script:
224 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
225 configure-clang-6:
226   extends:
227     - .configure-clang
228     - .clang6-template
229   needs:
230     - job: simple-build
231       artifacts: false
232   variables:
233     COMPILER_MAJOR_VERSION: "6.0"
234     CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
235   except:
236     variables:
237       - $GROMACS_RELEASE
238
239 configure-clang-7:
240   extends:
241     - .configure-clang
242     - .clang7-template
243   needs:
244     - job: simple-build
245       artifacts: false
246   variables:
247     COMPILER_MAJOR_VERSION: 7
248   except:
249     variables:
250       - $GROMACS_RELEASE
251
252 configure-clang-7-release:
253   extends:
254     - .configure-clang-release
255     - .no-cache-template
256     - .clang7-template
257   variables:
258     COMPILER_MAJOR_VERSION: 7
259     RELEASE_BUILD_DIR: release-builds-clang
260   only:
261     refs:
262       - web
263       - schedules
264       - triggers
265     variables:
266       - $GROMACS_RELEASE
267   dependencies:
268     - package-archive-release
269     - package-regressiontests-release
270     - prepare-release-version
271
272 configure-clang-7-gmxapi:
273   extends:
274     - .configure-clang
275     - .configure-gmxapi-template
276     - .clang7-template
277   needs:
278     - job: simple-build
279       artifacts: false
280   variables:
281     COMPILER_MAJOR_VERSION: 7
282   except:
283     variables:
284       - $GROMACS_RELEASE
285
286 configure-clang-7-gmxapi-release:
287   extends:
288     - .configure-clang-release
289     - .configure-gmxapi-template
290     - .no-cache-template
291     - .clang7-template
292   variables:
293     COMPILER_MAJOR_VERSION: 7
294     RELEASE_BUILD_DIR: release-builds-clang
295   only:
296     refs:
297       - web
298       - schedules
299       - triggers
300     variables:
301       - $GROMACS_RELEASE
302   dependencies:
303     - package-archive-release
304     - package-regressiontests-release
305     - prepare-release-version
306
307 configure-clang-8:
308   extends:
309     - .configure-clang
310     - .clang8-template
311   needs:
312     - job: simple-build
313       artifacts: false
314   variables:
315     COMPILER_MAJOR_VERSION: 8
316   except:
317     variables:
318       - $GROMACS_RELEASE
319
320 configure-clang-8-release:
321   extends:
322     - .configure-clang-release
323     - .no-cache-template
324     - .clang8-template
325   variables:
326     COMPILER_MAJOR_VERSION: 8
327     RELEASE_BUILD_DIR: release-builds-clang
328   only:
329     refs:
330       - web
331       - schedules
332       - triggers
333     variables:
334       - $GROMACS_RELEASE
335   dependencies:
336     - package-archive-release
337     - package-regressiontests-release
338     - prepare-release-version
339
340 # Jobs running during build stage
341
342 .build-extends-template:
343   extends:
344     - .binary-build-template
345     - .build-cache-template
346     - .variables:default
347
348 .build-gcc:
349   extends:
350     - .build-extends-template
351     - .gcc-before-script-template
352     - .build-gcc-template
353
354 .build-gcc-cuda:
355   extends:
356     - .build-gcc
357     - .cuda-template
358
359 build-gcc-7:
360   extends:
361     - .build-gcc
362     - .gcc7-template
363   needs:
364     - job: simple-build
365       artifacts: false
366     - job: configure-gcc-7
367       artifacts: true
368   except:
369     variables:
370       - $GROMACS_RELEASE
371
372 build-gcc-7-release:
373   extends:
374     - .build-gcc
375     - .gcc7-template
376   stage: release-build
377   variables:
378     BUILD_DIR: release-builds-gcc
379   needs:
380     - job: configure-gcc-7-release
381       artifacts: true
382   only:
383     refs:
384       - web
385       - schedules
386       - triggers
387     variables:
388       - $GROMACS_RELEASE
389
390 build-gcc-7-simd-sse41:
391   extends:
392     - .build-gcc
393     - .gcc7-template
394   needs:
395     - job: simple-build
396       artifacts: false
397     - job: configure-gcc-7-simd-sse41
398       artifacts: true
399   except:
400     variables:
401       - $GROMACS_RELEASE
402
403 build-gcc-7-double:
404   extends:
405     - .build-gcc
406     - .gcc7-template
407   needs:
408     - job: simple-build
409       artifacts: false
410     - job: configure-gcc-7-double
411       artifacts: true
412   except:
413     variables:
414       - $GROMACS_RELEASE
415
416 build-gcc-7-gmxapi:
417   extends:
418     - .build-gcc
419     - .gmxapi-extra-installs
420     - .gcc7-template
421   needs:
422     - job: simple-build
423       artifacts: false
424     - job: configure-gcc-7-gmxapi
425       artifacts: true
426   except:
427     variables:
428       - $GROMACS_RELEASE
429
430 build-gcc-7-double-release:
431   extends:
432     - .build-gcc
433     - .gcc7-template
434   stage: release-build
435   variables:
436     BUILD_DIR: release-builds-gcc
437   needs:
438     - job: configure-gcc-7-double-release
439       artifacts: true
440   only:
441     refs:
442       - web
443       - schedules
444       - triggers
445     variables:
446       - $GROMACS_RELEASE
447
448 build-gcc-7-gmxapi-release:
449   extends:
450     - .build-gcc
451     - .gmxapi-extra-installs
452     - .gcc7-template
453   stage: release-build
454   variables:
455     BUILD_DIR: release-builds-gcc
456   needs:
457     - job: configure-gcc-7-gmxapi-release
458       artifacts: true
459   only:
460     refs:
461       - web
462       - schedules
463       - triggers
464     variables:
465       - $GROMACS_RELEASE
466
467 build-gcc-8:
468   extends:
469     - .build-gcc
470     - .gcc8-template
471   needs:
472     - job: simple-build
473       artifacts: false
474     - job: configure-gcc-8
475       artifacts: true
476   except:
477     variables:
478       - $GROMACS_RELEASE
479
480 build-gcc-8-release:
481   extends:
482     - .build-gcc
483     - .gcc8-template
484   stage: release-build
485   variables:
486     BUILD_DIR: release-builds-gcc
487   needs:
488     - job: configure-gcc-8-release
489       artifacts: true
490   only:
491     refs:
492       - web
493       - schedules
494       - triggers
495     variables:
496       - $GROMACS_RELEASE
497
498 build-gcc-8-cuda-10.2:
499   extends:
500     - .build-gcc-cuda
501     - .gcc-8-cuda-10.2-template
502   needs:
503     - job: simple-build
504       artifacts: false
505     - job: configure-gcc-8-cuda-10.2
506       artifacts: true
507   except:
508     variables:
509       - $GROMACS_RELEASE
510
511 .build-clang:
512   extends:
513     - .build-extends-template
514     - .clang-before-script-template
515     - .build-clang-template
516
517 build-clang-6:
518   extends:
519     - .build-clang
520     - .clang6-template
521   needs:
522     - job: simple-build
523       artifacts: false
524     - job: configure-clang-6
525       artifacts: true
526   except:
527     variables:
528       - $GROMACS_RELEASE
529
530 build-clang-7:
531   extends:
532     - .build-clang
533     - .clang7-template
534   needs:
535     - job: simple-build
536       artifacts: false
537     - job: configure-clang-7
538       artifacts: true
539   except:
540     variables:
541       - $GROMACS_RELEASE
542
543 build-clang-7-release:
544   extends:
545     - .build-clang
546     - .clang7-template
547   stage: release-build
548   variables:
549     BUILD_DIR: release-builds-clang
550   needs:
551     - job: configure-clang-7-release
552       artifacts: true
553   only:
554     refs:
555       - web
556       - schedules
557       - triggers
558     variables:
559       - $GROMACS_RELEASE
560
561 build-clang-7-gmxapi:
562   extends:
563     - .build-clang
564     - .gmxapi-extra-installs
565     - .clang7-template
566   needs:
567     - job: simple-build
568       artifacts: false
569     - job: configure-clang-7-gmxapi
570       artifacts: true
571   except:
572     variables:
573       - $GROMACS_RELEASE
574
575 build-clang-7-gmxapi-release:
576   extends:
577     - .build-clang
578     - .gmxapi-extra-installs
579     - .clang7-template
580   stage: release-build
581   variables:
582     BUILD_DIR: release-builds-clang
583   needs:
584     - job: configure-clang-7-gmxapi-release
585       artifacts: true
586   only:
587     refs:
588       - web
589       - schedules
590       - triggers
591     variables:
592       - $GROMACS_RELEASE
593
594 build-clang-8:
595   extends:
596     - .build-clang
597     - .clang8-template
598   needs:
599     - job: simple-build
600       artifacts: false
601     - job: configure-clang-8
602       artifacts: true
603   except:
604     variables:
605       - $GROMACS_RELEASE
606
607 build-clang-8-release:
608   extends:
609     - .build-clang
610     - .clang8-template
611   stage: release-build
612   variables:
613     BUILD_DIR: release-builds-clang
614   needs:
615     - job: configure-clang-8-release
616       artifacts: true
617   only:
618     refs:
619       - web
620       - schedules
621       - triggers
622     variables:
623       - $GROMACS_RELEASE
624
625
626 # Jobs running during test stage
627 .test-base-template:
628   variables:
629     BUILD_DIR: build
630   # Docker image uploaded to dockerhub by user eriklindahl
631   # TODO: Get DockerFile for admin/dockerfiles
632   image: biophysics/gcc-gromacs
633   stage: test
634   retry:
635     max: 2
636
637 .test-script-template:
638   script:
639     - cd $BUILD_DIR
640     - ctest -D ExperimentalTest --output-on-failure | tee ctestLog.log || true
641     - awk '/The following tests FAILED/,/^Errors while running CTest|^$/'
642       ctestLog.log | tee ctestErrors.log
643     - xsltproc scripts/CTest2JUnit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > JUnitTestResults.xml
644     - if [ -s ctestErrors.log ] ; then
645       echo "Error during running ctest";
646       exit 1;
647       fi
648     - cd ..
649   artifacts:
650     reports:
651       junit: $BUILD_DIR/JUnitTestResults.xml
652     paths:
653       - $BUILD_DIR/Testing
654       - $BUILD_DIR/tests
655     when: always
656     expire_in: 1 week
657
658 .test-extends-template:
659   extends:
660     - .test-base-template
661     - .pull-cache-template
662     - .test-script-template
663     - .variables:default
664
665 .test-gcc-template:
666   variables:
667     COMPILER_MAJOR_VERSION: 7
668     BUILD_DIR: build-gcc
669
670 .test-gcc:
671   extends:
672     - .test-extends-template
673     - .gcc-before-script-template
674     - .test-gcc-template
675
676 .test-gcc-cuda:
677   extends:
678     - .test-gcc
679     - .cuda-template
680
681 test-gcc-7:
682   extends:
683     - .test-gcc
684     - .gcc7-template
685   needs:
686     - job: simple-build
687       artifacts: false
688     - job: build-gcc-7
689   except:
690     variables:
691       - $GROMACS_RELEASE
692
693 test-gcc-7-release:
694   extends:
695     - .test-gcc
696     - .gcc7-template
697   stage: release-tests
698   variables:
699     BUILD_DIR: release-builds-gcc
700   needs:
701     - job: configure-gcc-7-release
702       artifacts: true
703     - job: build-gcc-7-release
704       artifacts: true
705   only:
706     refs:
707       - triggers
708       - web
709       - schedules
710     variables:
711       - $GROMACS_RELEASE
712
713 test-gcc-7-simd-sse41:
714   extends:
715     - .test-gcc
716     - .gcc7-template
717   needs:
718     - job: simple-build
719       artifacts: false
720     - job: build-gcc-7-simd-sse41
721   except:
722     variables:
723       - $GROMACS_RELEASE
724
725 test-gcc-7-double:
726   extends:
727     - .test-gcc
728     - .gcc7-template
729   needs:
730     - job: simple-build
731       artifacts: false
732     - job: build-gcc-7-double
733   except:
734     variables:
735       - $GROMACS_RELEASE
736
737 test-gcc-7-double-release:
738   extends:
739     - .test-gcc
740     - .gcc7-template
741   stage: release-tests
742   variables:
743     BUILD_DIR: release-builds-gcc
744   needs:
745     - job: configure-gcc-7-double-release
746       artifacts: true
747     - job: build-gcc-7-double-release
748       artifacts: true
749   only:
750     refs:
751       - triggers
752       - web
753       - schedules
754     variables:
755       - $GROMACS_RELEASE
756
757 test-gcc-7-gmxapi:
758   extends:
759     - .test-gcc
760     - .gmxapi-extra-installs
761     - .gcc7-template
762   needs:
763     - job: simple-build
764       artifacts: false
765     - job: build-gcc-7-gmxapi
766   except:
767     variables:
768       - $GROMACS_RELEASE
769
770 test-gcc-7-gmxapi-release:
771   extends:
772     - .test-gcc
773     - .gmxapi-extra-installs
774     - .gcc7-template
775   stage: release-tests
776   variables:
777     BUILD_DIR: release-builds-gcc
778   needs:
779     - job: configure-gcc-7-gmxapi-release
780       artifacts: true
781     - job: build-gcc-7-gmxapi-release
782       artifacts: true
783   only:
784     refs:
785       - triggers
786       - web
787       - schedules
788     variables:
789       - $GROMACS_RELEASE
790
791 test-gcc-8:
792   extends:
793     - .test-gcc
794     - .gcc8-template
795   needs:
796     - job: simple-build
797       artifacts: false
798     - job: build-gcc-8
799   except:
800     variables:
801       - $GROMACS_RELEASE
802
803 test-gcc-8-release:
804   extends:
805     - .test-gcc
806     - .gcc8-template
807   stage: release-tests
808   variables:
809     BUILD_DIR: release-builds-gcc
810   needs:
811     - job: configure-gcc-8-release
812       artifacts: true
813     - job: build-gcc-8-release
814       artifacts: true
815   only:
816     refs:
817       - triggers
818       - web
819       - schedules
820     variables:
821       - $GROMACS_RELEASE
822
823 test-gcc-8-cuda-10.2:
824   variables:
825     KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
826     KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
827   extends:
828     - .test-gcc-cuda
829     - .gcc-8-cuda-10.2-template
830   needs:
831     - job: simple-build
832       artifacts: false
833     - job: build-gcc-8-cuda-10.2
834   except:
835     variables:
836       - $GROMACS_RELEASE
837
838 .test-clang-template:
839   variables:
840     COMPILER_MAJOR_VERSION: 7
841     BUILD_DIR: build-clang
842
843 .test-clang:
844   extends:
845     - .test-extends-template
846     - .clang-before-script-template
847     - .test-clang-template
848
849 test-clang-6:
850   extends:
851     - .test-clang
852     - .clang6-template
853   needs:
854     - job: simple-build
855       artifacts: false
856     - job: build-clang-6
857   except:
858     variables:
859       - $GROMACS_RELEASE
860
861 test-clang-7:
862   extends:
863     - .test-clang
864     - .clang7-template
865   needs:
866     - job: simple-build
867       artifacts: false
868     - job: build-clang-7
869   except:
870     variables:
871       - $GROMACS_RELEASE
872
873 test-clang-7-release:
874   extends:
875     - .test-clang
876     - .clang7-template
877   stage: release-tests
878   variables:
879     BUILD_DIR: release-builds-clang
880   needs:
881     - job: configure-clang-7-release
882       artifacts: true
883     - job: build-clang-7-release
884       artifacts: true
885   only:
886     refs:
887       - triggers
888       - web
889       - schedules
890     variables:
891       - $GROMACS_RELEASE
892
893 test-clang-7-gmxapi:
894   extends:
895     - .test-clang
896     - .gmxapi-extra-installs
897     - .clang7-template
898   needs:
899     - job: simple-build
900       artifacts: false
901     - job: build-clang-7-gmxapi
902   except:
903     variables:
904       - $GROMACS_RELEASE
905
906 test-clang-7-gmxapi-release:
907   extends:
908     - .test-clang
909     - .gmxapi-extra-installs
910     - .clang7-template
911   stage: release-tests
912   variables:
913     BUILD_DIR: release-builds-clang
914   needs:
915     - job: configure-clang-7-gmxapi-release
916       artifacts: true
917     - job: build-clang-7-gmxapi-release
918       artifacts: true
919   only:
920     refs:
921       - triggers
922       - web
923       - schedules
924     variables:
925       - $GROMACS_RELEASE
926
927 test-clang-8:
928   extends:
929     - .test-clang
930     - .clang8-template
931   needs:
932     - job: simple-build
933       artifacts: false
934     - job: build-clang-8
935   except:
936     variables:
937       - $GROMACS_RELEASE
938
939 test-clang-8-release:
940   extends:
941     - .test-clang
942     - .clang8-template
943   stage: release-tests
944   variables:
945     BUILD_DIR: release-builds-clang
946   needs:
947     - job: configure-clang-8-release
948       artifacts: true
949     - job: build-clang-8-release
950       artifacts: true
951   only:
952     refs:
953       - triggers
954       - web
955       - schedules
956     variables:
957       - $GROMACS_RELEASE