Merge branch release-2020 into master
[alexxy/gromacs.git] / .gitlab-ci.yml
1 include:
2   - local: '/admin/ci-templates/.include-template.yml'
3
4 .configure-extends-template:
5   extends:
6     - .configure-build-template
7     - .no-cache-template
8     - .variables-template
9     - .tags-template
10
11 .configure-release-extends-template:
12   extends:
13     - .configure-build-release-template
14     - .no-cache-template
15     - .variables-template
16     - .tags-template
17
18 .build-extends-template:
19   extends:
20     - .binary-build-template
21     - .build-cache-template
22     - .variables-template
23     - .tags-template
24
25 .test-extends-template:
26   extends:
27     - .test-base-template
28     - .pull-cache-template
29     - .test-script-template
30     - .variables-template
31     - .tags-template
32
33 .regressiontests-extends-template:
34   extends:
35     - .no-cache-template
36     - .variables-template
37     - .tags-template
38
39 # CI is organized into stages so that if early stages fail
40 # the later ones are not run.
41 stages:
42   # Initial test build for checking simple compilation and getting regressiontest repo
43   - pre-build
44   # Configuration for building and testing
45   - configure-build
46   # Build GROMACS in multiple configurations
47   - build
48   # Test each configuration, perhaps in multiple ways
49   - test
50   # Generate documentation files
51   - documentation
52   # Check documentation from source code for errors
53   - source-check
54   # Linting, docs, static analysis, coverage, code analysis...
55   - post-test
56   # Nightly work to configure builds
57   - nightly-configure
58   # Nightly build stage
59   - nightly-build
60   # Nightly deploy stage
61   - nightly-deploy
62   # Release work for packaging code
63   - release-package
64   # Release checksum verification
65   - release-verify
66   # Configure code for release builds
67   - release-configure
68   # Release work for packaging code
69   - release-build
70   # Tests for release code
71   - release-tests
72   # Prepare for deploying artifacts
73   - release-prepare-deploy
74   # Deploy stage for release builds
75   - release-deploy
76
77 # Templates for configuration stage
78 .configure-gcc:
79   extends:
80     - .configure-extends-template
81     - .gcc-before-script-template
82     - .build-gcc-template
83
84 .configure-gcc-release:
85   extends:
86     - .configure-release-extends-template
87     - .gcc-before-script-template
88     - .build-gcc-template
89
90 .configure-gcc-cuda:
91     extends:
92       - .configure-gcc
93       - .cuda-template
94
95 .configure-clang:
96   extends:
97     - .configure-extends-template
98     - .clang-before-script-template
99     - .build-clang-template
100
101 .configure-clang-release:
102   extends:
103     - .configure-release-extends-template
104     - .clang-before-script-template
105     - .build-clang-template
106
107 .configure-docs:
108   extends:
109     - .configure-extends-template
110     - .configure-docs-template
111     - .documentation-before-script-template
112
113 .configure-docs-release:
114   extends:
115     - .configure-extends-template
116     - .configure-docs-release-template
117     - .documentation-before-script-template
118
119 # Templates for build stage
120 .build-archive:
121   extends:
122     - .build-extends-template
123     - .documentation-before-script-template
124     - .build-docs-binary-template
125     - .archive-build-template
126
127 .build-gcc:
128   extends:
129     - .build-extends-template
130     - .gcc-before-script-template
131     - .build-gcc-template
132
133 .build-clang:
134   extends:
135     - .build-extends-template
136     - .clang-before-script-template
137     - .build-clang-template
138
139 .build-docs-binary:
140   extends:
141     - .build-extends-template
142     - .build-cache-template
143     - .build-docs-binary-template
144     - .documentation-before-script-template
145
146 .build-docs-webpage:
147   extends:
148     - .binary-build-template
149     - .variables-template
150     - .tags-template
151     - .no-cache-template
152     - .build-docs-webpage-template
153     - .documentation-before-script-template
154
155 .build-gcc-cuda:
156     extends:
157       - .build-gcc
158       - .cuda-template
159
160 # Templates for test stage
161 .test-gcc:
162   extends:
163     - .test-extends-template
164     - .gcc-before-script-template
165     - .test-gcc-template
166
167 .test-gcc-cuda:
168     extends:
169       - .test-gcc
170       - .cuda-template
171
172 .test-clang:
173   extends:
174     - .test-extends-template
175     - .clang-before-script-template
176     - .test-clang-template
177
178 # Special job to package regressiontest files and have them available for testing
179 # Runs during pre-build
180 prepare-regressiontests:
181   extends:
182     - .regressiontests-extends-template
183     - .regressiontests-template
184
185 prepare-release-version:
186   extends:
187     - .regressiontests-extends-template
188     - .release-version-template
189
190 # Initial build that always needs to pass before follow-up stages run
191 simple-build:
192   extends:
193     - .simple-build-template
194     - .build-cache-template
195     - .variables-template
196     - .tags-template
197     - .gcc-before-script-template
198     - .build-gcc-template
199     - .gcc7-template
200   variables:
201     COMPILER_MAJOR_VERSION: 7
202     BUILD_DIR: simple-build
203   except:
204     variables:
205       - $GROMACS_RELEASE
206
207 # Jobs running in first pre-build stage
208 configure-gcc-7:
209   extends:
210     - .configure-gcc
211     - .gcc7-template
212   needs:
213     - job: simple-build
214       artifacts: false
215   variables:
216     COMPILER_MAJOR_VERSION: 7
217   except:
218     variables:
219       - $GROMACS_RELEASE
220
221 configure-gcc-7-gmxapi:
222   extends:
223     - .configure-gcc
224     - .configure-gmxapi-template
225     - .gcc7-template
226   needs:
227     - job: simple-build
228       artifacts: false
229   variables:
230     COMPILER_MAJOR_VERSION: 7
231   except:
232     variables:
233       - $GROMACS_RELEASE
234
235 configure-gcc-7-double:
236   extends:
237     - .configure-gcc
238     - .gcc7-template
239   needs:
240     - job: simple-build
241       artifacts: false
242   variables:
243     COMPILER_MAJOR_VERSION: 7
244     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
245   except:
246     variables:
247       - $GROMACS_RELEASE
248
249 configure-gcc-8:
250   extends:
251     - .configure-gcc
252     - .gcc8-template
253   needs:
254     - job: simple-build
255       artifacts: false
256   variables:
257     COMPILER_MAJOR_VERSION: 8
258   except:
259     variables:
260       - $GROMACS_RELEASE
261
262 configure-gcc-8-cuda-10.2:
263     extends:
264       - .configure-gcc-cuda
265       - .gcc-8-cuda-10.2-template
266     needs:
267       - job: simple-build
268         artifacts: false
269     except:
270       variables:
271         - $GROMACS_RELEASE
272
273 configure-gcc-7-simd-sse41:
274   extends:
275     - .configure-gcc
276     - .gcc7-template
277   needs:
278     - job: simple-build
279       artifacts: false
280   variables:
281     COMPILER_MAJOR_VERSION: 7
282     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=SSE4.1"
283   except:
284     variables:
285       - $GROMACS_RELEASE
286
287 configure-clang-7:
288   extends:
289     - .configure-clang
290     - .clang7-template
291   needs:
292     - job: simple-build
293       artifacts: false
294   variables:
295     COMPILER_MAJOR_VERSION: 7
296   except:
297     variables:
298       - $GROMACS_RELEASE
299
300 configure-clang-7-gmxapi:
301   extends:
302     - .configure-clang
303     - .configure-gmxapi-template
304     - .clang7-template
305   needs:
306     - job: simple-build
307       artifacts: false
308   variables:
309     COMPILER_MAJOR_VERSION: 7
310   except:
311     variables:
312       - $GROMACS_RELEASE
313
314 configure-clang-8:
315   extends:
316     - .configure-clang
317     - .clang8-template
318   needs:
319     - job: simple-build
320       artifacts: false
321   variables:
322     COMPILER_MAJOR_VERSION: 8
323   except:
324     variables:
325       - $GROMACS_RELEASE
326
327 # For version of clang before 7, we need to always provide the full version
328 # Use something like this instead in the download script:
329 # APT_COMPILER_VERSION=$(($COMPILER_MAJOR_VERSION < 7 ? "${COMPILER_MAJOR_VERSION}.0" : $COMPILER_MAJOR_VERSION))
330 configure-clang-6:
331   extends:
332     - .configure-clang
333     - .clang6-template
334   needs:
335     - job: simple-build
336       artifacts: false
337   variables:
338     COMPILER_MAJOR_VERSION: "6.0"
339     CMAKE_MPI_OPTIONS: -DGMX_OPENMP=OFF
340   except:
341     variables:
342       - $GROMACS_RELEASE
343
344 configure-clang-tidy:
345   extends:
346     - .configure-clang
347     - .clang7-template
348   needs:
349     - job: simple-build
350       artifacts: false
351   variables:
352     BUILD_DIR: build-clang-tidy
353     COMPILER_MAJOR_VERSION: 7
354     CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON
355     EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
356   except:
357     variables:
358       - $GROMACS_RELEASE
359
360 configure-docs:
361   extends:
362     - .configure-docs
363   needs:
364     - job: simple-build
365       artifacts: false
366   variables:
367     BUILD_DIR: build-docs
368     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
369   except:
370     variables:
371       - $GROMACS_RELEASE
372
373 configure-docs-gmxapi:
374   extends:
375     - .configure-docs
376     - .configure-gmxapi-template
377   needs:
378     - job: simple-build
379       artifacts: false
380   variables:
381     BUILD_DIR: build-docs-gmxapi
382     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
383   except:
384     variables:
385       - $GROMACS_RELEASE
386
387 # Only running in scheduled pipelines that are not release builds
388 configure-archive-nightly:
389   stage: nightly-configure
390   only:
391     - triggers
392     - schedules
393   needs:
394     - job: simple-build
395       artifacts: false
396   except:
397     variables:
398       - $GROMACS_RELEASE
399   extends:
400     - .configure-docs
401   variables:
402     BUILD_DIR: build-package
403     CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None
404     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF
405     CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF
406
407 configure-archive-release:
408   only:
409     refs:
410       - web
411       - triggers
412       - schedules
413     variables:
414       - $GROMACS_RELEASE
415
416   extends:
417     - .configure-docs
418   variables:
419     BUILD_DIR: build-package
420     CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None
421     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF
422     CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF
423
424 # Jobs running during build stage
425 build-gcc-7:
426   extends:
427     - .build-gcc
428     - .gcc7-template
429   needs:
430     - job: simple-build
431       artifacts: false
432     - job: configure-gcc-7
433       artifacts: true
434   except:
435     variables:
436       - $GROMACS_RELEASE
437
438
439 build-gcc-7-gmxapi:
440   extends:
441     - .build-gcc
442     - .gmxapi-extra-installs
443     - .gcc7-template
444   needs:
445     - job: simple-build
446       artifacts: false
447     - job: configure-gcc-7-gmxapi
448       artifacts: true
449   except:
450     variables:
451       - $GROMACS_RELEASE
452
453 build-gcc-7-double:
454   extends:
455     - .build-gcc
456     - .gcc7-template
457   needs:
458     - job: simple-build
459       artifacts: false
460     - job: configure-gcc-7-double
461       artifacts: true
462   except:
463     variables:
464       - $GROMACS_RELEASE
465
466 build-gcc-8:
467     extends:
468       - .build-gcc
469       - .gcc8-template
470     needs:
471       - job: simple-build
472         artifacts: false 
473       - job: configure-gcc-8
474         artifacts: true
475     except:
476       variables:
477         - $GROMACS_RELEASE
478
479 build-gcc-8-cuda-10.2:
480     extends:
481       - .build-gcc-cuda
482       - .gcc-8-cuda-10.2-template
483     needs:
484       - job: simple-build
485         artifacts: false
486       - job: configure-gcc-8-cuda-10.2
487         artifacts: true
488     except:
489       variables:
490         - $GROMACS_RELEASE
491
492 build-gcc-7-simd-sse41:
493     extends:
494       - .build-gcc
495       - .gcc7-template
496     needs:
497       - job: simple-build
498         artifacts: false 
499       - job: configure-gcc-7-simd-sse41
500         artifacts: true
501     except:
502       variables:
503         - $GROMACS_RELEASE
504
505 build-clang-7:
506     extends:
507       - .build-clang
508       - .clang7-template
509     needs:
510       - job: simple-build
511         artifacts: false 
512       - job: configure-clang-7
513         artifacts: true
514     except:
515       variables:
516         - $GROMACS_RELEASE
517
518 build-clang-7-gmxapi:
519     extends:
520       - .build-clang
521       - .gmxapi-extra-installs
522       - .clang7-template
523     needs:
524       - job: simple-build
525         artifacts: false 
526       - job: configure-clang-7-gmxapi
527         artifacts: true
528     except:
529       variables:
530         - $GROMACS_RELEASE
531
532 build-clang-8:
533     extends:
534       - .build-clang
535       - .clang8-template
536     needs:
537       - job: simple-build
538         artifacts: false 
539       - job: configure-clang-8
540         artifacts: true
541     except:
542       variables:
543         - $GROMACS_RELEASE
544
545 build-clang-6:
546     extends:
547       - .build-clang
548       - .clang6-template
549     needs:
550       - job: simple-build
551         artifacts: false 
552       - job: configure-clang-6
553         artifacts: true
554     except:
555       variables:
556         - $GROMACS_RELEASE
557
558 # Jobs running during test stage
559 test-gcc-7:
560     extends:
561       - .test-gcc
562       - .gcc7-template
563     needs:
564       - job: simple-build
565         artifacts: false 
566       - job: build-gcc-7
567     except:
568       variables:
569         - $GROMACS_RELEASE
570
571 test-gcc-7-gmxapi:
572     extends:
573       - .test-gcc
574       - .gmxapi-extra-installs
575       - .gcc7-template
576     needs:
577       - job: simple-build
578         artifacts: false 
579       - job: build-gcc-7-gmxapi
580     except:
581       variables:
582         - $GROMACS_RELEASE
583
584 test-gcc-7-double:
585     extends:
586       - .test-gcc
587       - .gcc7-template
588     needs:
589       - job: simple-build
590         artifacts: false 
591       - job: build-gcc-7-double
592     except:
593       variables:
594         - $GROMACS_RELEASE
595
596 test-gcc-8:
597     extends:
598       - .test-gcc
599       - .gcc8-template
600     needs:
601       - job: simple-build
602         artifacts: false 
603       - job: build-gcc-8
604     except:
605       variables:
606         - $GROMACS_RELEASE
607
608 test-gcc-8-cuda-10.2:
609     variables:
610       KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
611       KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
612     extends:
613       - .test-gcc-cuda
614       - .gcc-8-cuda-10.2-template
615     needs:
616       - job: simple-build
617         artifacts: false 
618       - job: build-gcc-8-cuda-10.2
619     except:
620       variables:
621         - $GROMACS_RELEASE
622
623 test-gcc-7-simd-sse41:
624     extends:
625       - .test-gcc
626       - .gcc7-template
627     needs:
628       - job: simple-build
629         artifacts: false 
630       - job: build-gcc-7-simd-sse41
631     except:
632       variables:
633         - $GROMACS_RELEASE
634
635 test-clang-7:
636     extends:
637       - .test-clang
638       - .clang7-template
639     needs:
640       - job: simple-build
641         artifacts: false 
642       - job: build-clang-7
643     except:
644       variables:
645         - $GROMACS_RELEASE
646
647 test-clang-7-gmxapi:
648     extends:
649       - .test-clang
650       - .gmxapi-extra-installs
651       - .clang7-template
652     needs:
653       - job: simple-build
654         artifacts: false 
655       - job: build-clang-7-gmxapi
656     except:
657       variables:
658         - $GROMACS_RELEASE
659
660 test-clang-8:
661     extends:
662       - .test-clang
663       - .clang8-template
664     needs:
665       - job: simple-build
666         artifacts: false 
667       - job: build-clang-8
668     except:
669       variables:
670         - $GROMACS_RELEASE
671
672 test-clang-6:
673     extends:
674       - .test-clang
675       - .clang6-template       
676     needs:
677       - job: simple-build
678         artifacts: false 
679       - job: build-clang-6
680     except:
681       variables:
682         - $GROMACS_RELEASE
683
684 # Jobs running in source checking stage
685 build-clang-tidy:
686   extends:
687     - .build-gcc
688     - .gcc8-template
689   needs:
690     - job: simple-build
691       artifacts: false
692     - job: configure-gcc-8
693       artifacts: true
694   except:
695     variables:
696       - $GROMACS_RELEASE
697
698 build-gcc-7-simd-sse41:
699   extends:
700     - .build-gcc
701     - .gcc7-template
702   needs:
703     - job: simple-build
704       artifacts: false
705     - job: configure-gcc-7-simd-sse41
706       artifacts: true
707   except:
708     variables:
709       - $GROMACS_RELEASE
710
711 build-clang-7:
712   extends:
713     - .build-clang
714     - .clang7-template
715   needs:
716     - job: simple-build
717       artifacts: false
718     - job: configure-clang-7
719       artifacts: true
720   except:
721     variables:
722       - $GROMACS_RELEASE
723
724 build-clang-7-gmxapi:
725   extends:
726     - .build-clang
727     - .gmxapi-extra-installs
728     - .clang7-template
729   needs:
730     - job: simple-build
731       artifacts: false
732     - job: configure-clang-7-gmxapi
733       artifacts: true
734   except:
735     variables:
736       - $GROMACS_RELEASE
737
738 build-clang-8:
739   extends:
740     - .build-clang
741     - .clang8-template
742   needs:
743     - job: simple-build
744       artifacts: false
745     - job: configure-clang-8
746       artifacts: true
747   except:
748     variables:
749       - $GROMACS_RELEASE
750
751 build-clang-6:
752   extends:
753     - .build-clang
754     - .clang6-template
755   needs:
756     - job: simple-build
757       artifacts: false
758     - job: configure-clang-6
759       artifacts: true
760   except:
761     variables:
762       - $GROMACS_RELEASE
763
764 # Jobs running during test stage
765 test-gcc-7:
766   extends:
767     - .test-gcc
768     - .gcc7-template
769   needs:
770     - job: simple-build
771       artifacts: false
772     - job: build-gcc-7
773   except:
774     variables:
775       - $GROMACS_RELEASE
776
777 test-gcc-7-gmxapi:
778   extends:
779     - .test-gcc
780     - .gmxapi-extra-installs
781     - .gcc7-template
782   needs:
783     - job: simple-build
784       artifacts: false
785     - job: build-gcc-7-gmxapi
786   except:
787     variables:
788       - $GROMACS_RELEASE
789
790 test-gcc-7-double:
791   extends:
792     - .test-gcc
793     - .gcc7-template
794   needs:
795     - job: simple-build
796       artifacts: false
797     - job: build-gcc-7-double
798   except:
799     variables:
800       - $GROMACS_RELEASE
801
802 test-gcc-8:
803   extends:
804     - .test-gcc
805     - .gcc8-template
806   needs:
807     - job: simple-build
808       artifacts: false
809     - job: build-gcc-8
810   except:
811     variables:
812       - $GROMACS_RELEASE
813
814 test-gcc-7-simd-sse41:
815   extends:
816     - .test-gcc
817     - .gcc7-template
818   needs:
819     - job: simple-build
820       artifacts: false
821     - job: build-gcc-7-simd-sse41
822   except:
823     variables:
824       - $GROMACS_RELEASE
825
826 test-clang-7:
827   extends:
828     - .test-clang
829     - .clang7-template
830   needs:
831     - job: simple-build
832       artifacts: false
833     - job: build-clang-7
834   except:
835     variables:
836       - $GROMACS_RELEASE
837
838 test-clang-7-gmxapi:
839   extends:
840     - .test-clang
841     - .gmxapi-extra-installs
842     - .clang7-template
843   needs:
844     - job: simple-build
845       artifacts: false
846     - job: build-clang-7-gmxapi
847   except:
848     variables:
849       - $GROMACS_RELEASE
850
851 test-clang-8:
852   extends:
853     - .test-clang
854     - .clang8-template
855   needs:
856     - job: simple-build
857       artifacts: false
858     - job: build-clang-8
859   except:
860     variables:
861       - $GROMACS_RELEASE
862
863 test-clang-6:
864   extends:
865     - .test-clang
866     - .clang6-template
867   needs:
868     - job: simple-build
869       artifacts: false
870     - job: build-clang-6
871   except:
872     variables:
873       - $GROMACS_RELEASE
874
875 # Jobs running in source checking stage
876 build-clang-tidy:
877   extends:
878     - .build-clang
879     - .clang7-template
880   stage: source-check
881   needs:
882     - job: simple-build
883       artifacts: false
884     - job: configure-clang-tidy
885       artifacts: true
886   variables:
887     BUILD_DIR: build-clang-tidy
888     COMPILER_MAJOR_VERSION: 7
889     EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
890   except:
891     variables:
892       - $GROMACS_RELEASE
893
894 run-clang-format:
895   extends:
896     - .binary-build-template
897     - .no-cache-template
898     - .variables-template
899     - .tags-template
900     - .clang-before-script-template
901     - .build-clang-template
902     - .clang7-template
903   stage: source-check
904   when: always
905   needs:
906     - job: simple-build
907       artifacts: false
908   variables:
909     KUBERNETES_CPU_LIMIT: 1
910     KUBERNETES_CPU_REQUEST: 1
911     KUBERNETES_MEMORY_LIMIT: 2Gi
912     COMPILER_MAJOR_VERSION: 7
913     EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION
914   except:
915     variables:
916       - $GROMACS_RELEASE
917   script:
918     - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
919     - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log
920     - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true
921     - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi
922   artifacts:
923     when: on_failure
924     paths:
925       - clang-format.log
926       - formatting.txt
927
928 run-copyright-check:
929   extends:
930     - .binary-build-template
931     - .no-cache-template
932     - .variables-template
933     - .tags-template
934     - .clang-before-script-template
935     - .build-clang-template
936     - .clang7-template
937   stage: source-check
938   when: always
939   needs:
940     - job: simple-build
941       artifacts: false
942   variables:
943     KUBERNETES_CPU_LIMIT: 1
944     KUBERNETES_CPU_REQUEST: 1
945     KUBERNETES_MEMORY_LIMIT: 2Gi
946   except:
947     variables:
948       - $GROMACS_RELEASE
949   script:
950     - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log
951     - grep -iq "copyright year" copyright.log | tee years.log || true
952     - grep -iq "copyright header" copyright.log | tee headers.log || true
953     - if [[ -s years.log || -s headers.log ]] ; then
954       echo "Copyright information needs updating" ;
955       exit 1 ;
956       fi
957   artifacts:
958     when: on_failure
959     paths:
960       - copyright.log
961       - years.log
962       - headers.log
963
964 run-check-source:
965   extends:
966     - .no-cache-template
967     - .variables-template
968     - .tags-template
969     - .build-docs-binary-template
970     - .documentation-before-script-template
971   stage: source-check
972   needs:
973     - job: simple-build
974       artifacts: false
975     - job: build-docs
976       artifacts: true
977   variables:
978     KUBERNETES_CPU_LIMIT: 1
979     KUBERNETES_CPU_REQUEST: 1
980     KUBERNETES_MEMORY_LIMIT: 2Gi
981     BUILD_DIR: build-docs
982     COMPILER_MAJOR_VERSION: 7
983   except:
984     variables:
985       - $GROMACS_RELEASE
986   script:
987     - cd $BUILD_DIR
988     - cmake --build . --target check-source
989     - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true
990     - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
991     - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi
992   artifacts:
993     name: docs-artifacts-$CI_COMMIT_REF_SLUG
994     when: always
995     expire_in: 1 week
996     paths:
997       - $BUILD_DIR/docs/doxygen/doxygen-xml.log
998       - $BUILD_DIR/docs/doxygen/check-source.log
999
1000 # Jobs running during documentation build stage
1001 build-docs:
1002   extends:
1003     - .build-docs-binary
1004   stage: documentation
1005   needs:
1006     - job: simple-build
1007       artifacts: false
1008     - job: configure-docs
1009       artifacts: true
1010   variables:
1011     BUILD_DIR: build-docs
1012   except:
1013     variables:
1014       - $GROMACS_RELEASE
1015
1016 build-docs-gmxapi:
1017   extends:
1018     - .build-docs-binary
1019     - .gmxapi-extra-installs
1020   stage: documentation
1021   needs:
1022     - job: simple-build
1023       artifacts: false
1024     - job: configure-docs-gmxapi
1025       artifacts: true
1026   variables:
1027     BUILD_DIR: build-docs-gmxapi
1028   except:
1029     variables:
1030       - $GROMACS_RELEASE
1031
1032 # Jobs running in post-test stage
1033
1034 # The manual build is built separately so that errors in converting
1035 # Sphinx to LaTeX and compiling can always be found in the
1036 # all-output.txt file, while avoiding many thousands of lines of spam
1037 # from pdflatex for normal builds. This does reduce the available
1038 # parallel utilization, and so increases the build time.
1039 #
1040 # TODO why are the doxygen and sphinx log files disappearing
1041 # TODO use a feature from gitlab runner instead of using pipefail to get timings for the job
1042 webpage:
1043   extends:
1044     - .build-docs-webpage
1045   stage: post-test
1046   needs:
1047     - job: build-docs
1048       artifacts: true
1049     - job: run-check-source
1050       artifacts: false
1051   variables:
1052     BUILD_DIR: build-docs
1053   except:
1054     variables:
1055       - $GROMACS_RELEASE
1056
1057 webpage-gmxapi:
1058   extends:
1059     - .build-docs-webpage
1060     - .gmxapi-extra-installs
1061   stage: post-test
1062   needs:
1063     - job: build-docs-gmxapi
1064       artifacts: true
1065     - job: run-check-source
1066       artifacts: false
1067   variables:
1068     BUILD_DIR: build-docs-gmxapi
1069   except:
1070     variables:
1071       - $GROMACS_RELEASE
1072
1073
1074 # Jobs running in release stage
1075 linkchecker:
1076   extends:
1077     - .build-docs-webpage
1078   stage: nightly-build
1079   dependencies:
1080     - webpage-gmxapi
1081   only:
1082     - schedules
1083     - triggers
1084     - merge_requests
1085     - external_pull_requests
1086   except:
1087     variables:
1088       - $GROMACS_RELEASE
1089   variables:
1090     KUBERNETES_CPU_LIMIT: 1
1091     KUBERNETES_CPU_REQUEST: 1
1092     KUBERNETES_MEMORY_LIMIT: 2Gi
1093     BUILD_DIR: build-docs-gmxapi
1094   script:
1095     - cd $BUILD_DIR
1096     - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full
1097       --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources
1098       -o xml
1099   artifacts:
1100     reports:
1101       junit: $BUILD_DIR/linkchecker-out.xml
1102
1103 build-archive-nightly:
1104   extends:
1105     - .build-archive
1106   stage: nightly-build
1107   needs:
1108     - job: simple-build
1109       artifacts: false
1110     - job: configure-archive-nightly
1111       artifacts: true
1112   only:
1113     - triggers
1114     - schedules
1115   except:
1116     variables:
1117       - $GROMACS_RELEASE
1118   variables:
1119     BUILD_DIR: build-package
1120
1121 webpage-nightly:
1122   extends:
1123     - .build-docs-webpage
1124     - .configure-gmxapi-template
1125   stage: nightly-deploy
1126   only:
1127     - triggers
1128     - schedules
1129   except:
1130     variables:
1131       - $GROMACS_RELEASE
1132   needs:
1133     - job: simple-build
1134       artifacts: false
1135     - job: linkchecker
1136       artifacts: false
1137     - job: webpage-gmxapi
1138       artifacts: true
1139   variables:
1140     BUILD_DIR: build-docs-gmxapi
1141   script:
1142     - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
1143   artifacts:
1144     when: always
1145     paths:
1146       - webpage.tar.gz
1147
1148 package-regressiontests-release:
1149   extends:
1150     - .regressiontests-extends-template
1151     - .regressiontests-release-template
1152   needs:
1153     - job: prepare-release-version
1154       artifacts: true
1155   only:
1156     refs:
1157       - triggers
1158       - web
1159       - schedules
1160     variables:
1161       - $GROMACS_RELEASE
1162
1163
1164 package-archive-release:
1165   extends:
1166     - .build-archive
1167   stage: release-package
1168   needs:
1169     - job: configure-archive-release
1170       artifacts: true
1171   only:
1172     refs:
1173       - triggers
1174       - web
1175       - schedules
1176     variables:
1177       - $GROMACS_RELEASE
1178   variables:
1179     BUILD_DIR: build-package
1180
1181 release-verify:
1182   extends:
1183     - .regressiontests-extends-template
1184     - .release-verify-template
1185   only:
1186     refs:
1187       - triggers
1188       - web
1189       - schedules
1190     variables:
1191       - $GROMACS_RELEASE
1192   dependencies:
1193     - package-archive-release
1194     - package-regressiontests-release
1195     - prepare-release-version
1196
1197 webpage-configure-release:
1198   extends:
1199     - .configure-docs-release
1200     - .configure-gmxapi-template
1201     - .no-cache-template
1202   only:
1203     refs:
1204       - web
1205       - schedules
1206       - triggers
1207     variables:
1208       - $GROMACS_RELEASE
1209   dependencies:
1210     - package-archive-release
1211     - package-regressiontests-release
1212     - prepare-release-version
1213   variables:
1214     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
1215
1216 configure-gcc-7-release:
1217   extends:
1218     - .configure-gcc-release
1219     - .no-cache-template
1220     - .gcc7-template
1221   variables:
1222     COMPILER_MAJOR_VERSION: 7
1223     RELEASE_BUILD_DIR: release-builds-gcc
1224   only:
1225     refs:
1226       - web
1227       - schedules
1228       - triggers
1229     variables:
1230       - $GROMACS_RELEASE
1231   dependencies:
1232     - package-archive-release
1233     - package-regressiontests-release
1234     - prepare-release-version
1235
1236 configure-gcc-7-gmxapi-release:
1237   extends:
1238     - .configure-gcc-release
1239     - .configure-gmxapi-template
1240     - .no-cache-template
1241     - .gcc7-template
1242   variables:
1243     COMPILER_MAJOR_VERSION: 7
1244     RELEASE_BUILD_DIR: release-builds-gcc
1245   only:
1246     refs:
1247       - web
1248       - schedules
1249       - triggers
1250     variables:
1251       - $GROMACS_RELEASE
1252   dependencies:
1253     - package-archive-release
1254     - package-regressiontests-release
1255     - prepare-release-version
1256
1257 configure-gcc-7-double-release:
1258   extends:
1259     - .configure-gcc-release
1260     - .no-cache-template
1261     - .gcc7-template
1262   variables:
1263     COMPILER_MAJOR_VERSION: 7
1264     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
1265     RELEASE_BUILD_DIR: release-builds-gcc
1266   only:
1267     refs:
1268       - web
1269       - schedules
1270       - triggers
1271     variables:
1272       - $GROMACS_RELEASE
1273   dependencies:
1274     - package-archive-release
1275     - package-regressiontests-release
1276     - prepare-release-version
1277
1278 configure-gcc-8-release:
1279   extends:
1280     - .configure-gcc-release
1281     - .no-cache-template
1282     - .gcc8-template
1283   variables:
1284     COMPILER_MAJOR_VERSION: 8
1285     RELEASE_BUILD_DIR: release-builds-gcc
1286   only:
1287     refs:
1288       - web
1289       - schedules
1290       - triggers
1291     variables:
1292       - $GROMACS_RELEASE
1293   dependencies:
1294     - package-archive-release
1295     - package-regressiontests-release
1296     - prepare-release-version
1297
1298 configure-clang-7-release:
1299   extends:
1300     - .configure-clang-release
1301     - .no-cache-template
1302     - .clang7-template
1303   variables:
1304     COMPILER_MAJOR_VERSION: 7
1305     RELEASE_BUILD_DIR: release-builds-clang
1306   only:
1307     refs:
1308       - web
1309       - schedules
1310       - triggers
1311     variables:
1312       - $GROMACS_RELEASE
1313   dependencies:
1314     - package-archive-release
1315     - package-regressiontests-release
1316     - prepare-release-version
1317
1318 configure-clang-7-gmxapi-release:
1319   extends:
1320     - .configure-clang-release
1321     - .configure-gmxapi-template
1322     - .no-cache-template
1323     - .clang7-template
1324   variables:
1325     COMPILER_MAJOR_VERSION: 7
1326     RELEASE_BUILD_DIR: release-builds-clang
1327   only:
1328     refs:
1329       - web
1330       - schedules
1331       - triggers
1332     variables:
1333       - $GROMACS_RELEASE
1334   dependencies:
1335     - package-archive-release
1336     - package-regressiontests-release
1337     - prepare-release-version
1338
1339 configure-clang-8-release:
1340   extends:
1341     - .configure-clang-release
1342     - .no-cache-template
1343     - .clang8-template
1344   variables:
1345     COMPILER_MAJOR_VERSION: 8
1346     RELEASE_BUILD_DIR: release-builds-clang
1347   only:
1348     refs:
1349       - web
1350       - schedules
1351       - triggers
1352     variables:
1353       - $GROMACS_RELEASE
1354   dependencies:
1355     - package-archive-release
1356     - package-regressiontests-release
1357     - prepare-release-version
1358
1359 build-gcc-7-release:
1360   extends:
1361     - .build-gcc
1362     - .gcc7-template
1363   stage: release-build
1364   variables:
1365     BUILD_DIR: release-builds-gcc
1366   needs:
1367     - job: configure-gcc-7-release
1368       artifacts: true
1369   only:
1370     refs:
1371       - web
1372       - schedules
1373       - triggers
1374     variables:
1375       - $GROMACS_RELEASE
1376
1377 build-gcc-7-gmxapi-release:
1378   extends:
1379     - .build-gcc
1380     - .gmxapi-extra-installs
1381     - .gcc7-template
1382   stage: release-build
1383   variables:
1384     BUILD_DIR: release-builds-gcc
1385   needs:
1386     - job: configure-gcc-7-gmxapi-release
1387       artifacts: true
1388   only:
1389     refs:
1390       - web
1391       - schedules
1392       - triggers
1393     variables:
1394       - $GROMACS_RELEASE
1395
1396 build-gcc-7-double-release:
1397   extends:
1398     - .build-gcc
1399     - .gcc7-template
1400   stage: release-build
1401   variables:
1402     BUILD_DIR: release-builds-gcc
1403   needs:
1404     - job: configure-gcc-7-double-release
1405       artifacts: true
1406   only:
1407     refs:
1408       - web
1409       - schedules
1410       - triggers
1411     variables:
1412       - $GROMACS_RELEASE
1413
1414 build-gcc-8-release:
1415   extends:
1416     - .build-gcc
1417     - .gcc8-template
1418   stage: release-build
1419   variables:
1420     BUILD_DIR: release-builds-gcc
1421   needs:
1422     - job: configure-gcc-8-release
1423       artifacts: true
1424   only:
1425     refs:
1426       - web
1427       - schedules
1428       - triggers
1429     variables:
1430       - $GROMACS_RELEASE
1431
1432 build-clang-7-release:
1433   extends:
1434     - .build-clang
1435     - .clang7-template
1436   stage: release-build
1437   variables:
1438     BUILD_DIR: release-builds-clang
1439   needs:
1440     - job: configure-clang-7-release
1441       artifacts: true
1442   only:
1443     refs:
1444       - web
1445       - schedules
1446       - triggers
1447     variables:
1448       - $GROMACS_RELEASE
1449
1450 build-clang-7-gmxapi-release:
1451   extends:
1452     - .build-clang
1453     - .gmxapi-extra-installs
1454     - .clang7-template
1455   stage: release-build
1456   variables:
1457     BUILD_DIR: release-builds-clang
1458   needs:
1459     - job: configure-clang-7-gmxapi-release
1460       artifacts: true
1461   only:
1462     refs:
1463       - web
1464       - schedules
1465       - triggers
1466     variables:
1467       - $GROMACS_RELEASE
1468
1469 build-clang-8-release:
1470   extends:
1471     - .build-clang
1472     - .clang8-template
1473   stage: release-build
1474   variables:
1475     BUILD_DIR: release-builds-clang
1476   needs:
1477     - job: configure-clang-8-release
1478       artifacts: true
1479   only:
1480     refs:
1481       - web
1482       - schedules
1483       - triggers
1484     variables:
1485       - $GROMACS_RELEASE
1486
1487 webpage-binary-release:
1488   extends:
1489     - .build-docs-binary
1490     - .gmxapi-extra-installs
1491   stage: release-build
1492   needs:
1493     - job: webpage-configure-release
1494       artifacts: true
1495   variables:
1496     BUILD_DIR: release-doc-builds
1497   only:
1498     refs:
1499       - triggers
1500       - web
1501       - schedules
1502     variables:
1503       - $GROMACS_RELEASE
1504
1505 test-gcc-7-release:
1506   extends:
1507     - .test-gcc
1508     - .gcc7-template
1509   stage: release-tests
1510   variables:
1511     BUILD_DIR: release-builds-gcc
1512   needs:
1513     - job: configure-gcc-7-release
1514       artifacts: true
1515     - job: build-gcc-7-release
1516       artifacts: true
1517   only:
1518     refs:
1519       - triggers
1520       - web
1521       - schedules
1522     variables:
1523       - $GROMACS_RELEASE
1524
1525 test-gcc-7-gmxapi-release:
1526   extends:
1527     - .test-gcc
1528     - .gmxapi-extra-installs
1529     - .gcc7-template
1530   stage: release-tests
1531   variables:
1532     BUILD_DIR: release-builds-gcc
1533   needs:
1534     - job: configure-gcc-7-gmxapi-release
1535       artifacts: true
1536     - job: build-gcc-7-gmxapi-release
1537       artifacts: true
1538   only:
1539     refs:
1540       - triggers
1541       - web
1542       - schedules
1543     variables:
1544       - $GROMACS_RELEASE
1545
1546 test-gcc-7-double-release:
1547   extends:
1548     - .test-gcc
1549     - .gcc7-template
1550   stage: release-tests
1551   variables:
1552     BUILD_DIR: release-builds-gcc
1553   needs:
1554     - job: configure-gcc-7-double-release
1555       artifacts: true
1556     - job: build-gcc-7-double-release
1557       artifacts: true
1558   only:
1559     refs:
1560       - triggers
1561       - web
1562       - schedules
1563     variables:
1564       - $GROMACS_RELEASE
1565
1566 test-gcc-8-release:
1567   extends:
1568     - .test-gcc
1569     - .gcc8-template
1570   stage: release-tests
1571   variables:
1572     BUILD_DIR: release-builds-gcc
1573   needs:
1574     - job: configure-gcc-8-release
1575       artifacts: true
1576     - job: build-gcc-8-release
1577       artifacts: true
1578   only:
1579     refs:
1580       - triggers
1581       - web
1582       - schedules
1583     variables:
1584       - $GROMACS_RELEASE
1585
1586 test-clang-7-release:
1587   extends:
1588     - .test-clang
1589     - .clang7-template
1590   stage: release-tests
1591   variables:
1592     BUILD_DIR: release-builds-clang
1593   needs:
1594     - job: configure-clang-7-release
1595       artifacts: true
1596     - job: build-clang-7-release
1597       artifacts: true
1598   only:
1599     refs:
1600       - triggers
1601       - web
1602       - schedules
1603     variables:
1604       - $GROMACS_RELEASE
1605
1606 test-clang-7-gmxapi-release:
1607   extends:
1608     - .test-clang
1609     - .gmxapi-extra-installs
1610     - .clang7-template
1611   stage: release-tests
1612   variables:
1613     BUILD_DIR: release-builds-clang
1614   needs:
1615     - job: configure-clang-7-gmxapi-release
1616       artifacts: true
1617     - job: build-clang-7-gmxapi-release
1618       artifacts: true
1619   only:
1620     refs:
1621       - triggers
1622       - web
1623       - schedules
1624     variables:
1625       - $GROMACS_RELEASE
1626
1627 test-clang-8-release:
1628   extends:
1629     - .test-clang
1630     - .clang8-template
1631   stage: release-tests
1632   variables:
1633     BUILD_DIR: release-builds-clang
1634   needs:
1635     - job: configure-clang-8-release
1636       artifacts: true
1637     - job: build-clang-8-release
1638       artifacts: true
1639   only:
1640     refs:
1641       - triggers
1642       - web
1643       - schedules
1644     variables:
1645       - $GROMACS_RELEASE
1646
1647 webpage-build-release:
1648   extends:
1649     - .build-docs-webpage
1650     - .configure-gmxapi-template
1651   dependencies:
1652     - webpage-binary-release
1653     - webpage-configure-release
1654   stage: release-prepare-deploy
1655   only:
1656     refs:
1657       - web
1658       - schedules
1659       - triggers
1660     variables:
1661       - $GROMACS_RELEASE
1662   variables:
1663     BUILD_DIR: release-doc-builds
1664
1665 webpage-archive-release:
1666   extends:
1667     - .build-docs-webpage
1668     - .configure-gmxapi-template
1669   stage: release-deploy
1670   only:
1671     refs:
1672       - web
1673       - triggers
1674       - schedules
1675     variables:
1676       - $GROMACS_RELEASE
1677   dependencies:
1678     - webpage-build-release
1679     - package-archive-release
1680     - package-regressiontests-release
1681   variables:
1682     BUILD_DIR: release-doc-builds
1683   script:
1684     - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
1685   artifacts:
1686     when: always
1687     paths:
1688       - webpage.tar.gz
1689       - gromacs-*tar.gz
1690       - regressiontests-*tar.gz
1691