Fix line overrun in log file
[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-prepare-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   # Unit 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-prepare-extends-template
183       - .regressiontests-template
184
185 prepare-release-version:
186     extends:
187       - .regressiontests-prepare-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       - web
392       - triggers
393       - schedules
394     needs:
395       - job: simple-build
396         artifacts: false
397     except:
398       variables:
399         - $GROMACS_RELEASE
400     extends:
401       - .configure-docs
402     variables:
403         BUILD_DIR: build-package
404         CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None
405         CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF
406         CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF
407
408 configure-archive-release:
409     only:
410       refs:
411         - web
412         - triggers
413         - schedules
414       variables:
415         - $GROMACS_RELEASE
416
417     extends:
418       - .configure-docs
419     variables:
420         BUILD_DIR: build-package
421         CMAKE_SIMD_OPTIONS: -DGMX_SIMD=None
422         CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_USE_RDTSCP=OFF
423         CMAKE_MPI_OPTIONS: -DGMX_THREAD_MPI=OFF -DGMX_OPENMP=OFF
424
425 # Jobs running during build stage
426 build-gcc-7:
427     extends:
428       - .build-gcc
429       - .gcc7-template
430     needs:
431       - job: simple-build
432         artifacts: false
433       - job: configure-gcc-7
434         artifacts: true
435     except:
436       variables:
437         - $GROMACS_RELEASE
438
439
440 build-gcc-7-gmxapi:
441     extends:
442       - .build-gcc
443       - .gmxapi-extra-installs
444       - .gcc7-template
445     needs:
446       - job: simple-build
447         artifacts: false 
448       - job: configure-gcc-7-gmxapi
449         artifacts: true
450     except:
451       variables:
452         - $GROMACS_RELEASE
453
454 build-gcc-7-double:
455     extends:
456       - .build-gcc
457       - .gcc7-template
458     needs:
459       - job: simple-build
460         artifacts: false 
461       - job: configure-gcc-7-double
462         artifacts: true
463     except:
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-cuda-10.2:
481     extends:
482       - .build-gcc-cuda
483       - .gcc-8-cuda-10.2-template
484     needs:
485       - job: simple-build
486         artifacts: false
487       - job: configure-gcc-8-cuda-10.2
488         artifacts: true
489     except:
490       variables:
491         - $GROMACS_RELEASE
492
493 build-gcc-7-simd-sse41:
494     extends:
495       - .build-gcc
496       - .gcc7-template
497     needs:
498       - job: simple-build
499         artifacts: false 
500       - job: configure-gcc-7-simd-sse41
501         artifacts: true
502     except:
503       variables:
504         - $GROMACS_RELEASE
505
506 build-clang-7:
507     extends:
508       - .build-clang
509       - .clang7-template
510     needs:
511       - job: simple-build
512         artifacts: false 
513       - job: configure-clang-7
514         artifacts: true
515     except:
516       variables:
517         - $GROMACS_RELEASE
518
519 build-clang-7-gmxapi:
520     extends:
521       - .build-clang
522       - .gmxapi-extra-installs
523       - .clang7-template
524     needs:
525       - job: simple-build
526         artifacts: false 
527       - job: configure-clang-7-gmxapi
528         artifacts: true
529     except:
530       variables:
531         - $GROMACS_RELEASE
532
533 build-clang-8:
534     extends:
535       - .build-clang
536       - .clang8-template
537     needs:
538       - job: simple-build
539         artifacts: false 
540       - job: configure-clang-8
541         artifacts: true
542     except:
543       variables:
544         - $GROMACS_RELEASE
545
546 build-clang-6:
547     extends:
548       - .build-clang
549       - .clang6-template
550     needs:
551       - job: simple-build
552         artifacts: false 
553       - job: configure-clang-6
554         artifacts: true
555     except:
556       variables:
557         - $GROMACS_RELEASE
558
559 # Jobs running during test stage
560 test-gcc-7:
561     extends:
562       - .test-gcc
563       - .gcc7-template
564     needs:
565       - job: simple-build
566         artifacts: false 
567       - job: build-gcc-7
568       - job: prepare-regressiontests
569     except:
570       variables:
571         - $GROMACS_RELEASE
572
573 test-gcc-7-gmxapi:
574     extends:
575       - .test-gcc
576       - .gmxapi-extra-installs
577       - .gcc7-template
578     needs:
579       - job: simple-build
580         artifacts: false 
581       - job: build-gcc-7-gmxapi
582       - job: prepare-regressiontests
583     except:
584       variables:
585         - $GROMACS_RELEASE
586
587 test-gcc-7-double:
588     extends:
589       - .test-gcc
590       - .gcc7-template
591     variables:
592       REGRESSIONTEST_DOUBLE: "-double"
593     needs:
594       - job: simple-build
595         artifacts: false 
596       - job: build-gcc-7-double
597       - job: prepare-regressiontests
598     except:
599       variables:
600         - $GROMACS_RELEASE
601
602 test-gcc-8:
603     extends:
604       - .test-gcc
605       - .gcc8-template
606     needs:
607       - job: simple-build
608         artifacts: false 
609       - job: build-gcc-8
610       - job: prepare-regressiontests
611     except:
612       variables:
613         - $GROMACS_RELEASE
614
615 test-gcc-8-cuda-10.2:
616     variables:
617       KUBERNETES_EXTENDED_RESOURCE_NAME: "nvidia.com/gpu"
618       KUBERNETES_EXTENDED_RESOURCE_LIMIT: 1
619     extends:
620       - .test-gcc-cuda
621       - .gcc-8-cuda-10.2-template
622     variables:
623       REGRESSIONTEST_PME_RANK_NUMBER: 0
624       REGRESSIONTEST_TOTAL_RANK_NUMBER: 2
625       REGRESSIONTEST_OMP_RANK_NUMBER: 1
626     needs:
627       - job: simple-build
628         artifacts: false 
629       - job: build-gcc-8-cuda-10.2
630       - job: prepare-regressiontests
631     except:
632       variables:
633         - $GROMACS_RELEASE
634
635 test-gcc-7-simd-sse41:
636     extends:
637       - .test-gcc
638       - .gcc7-template
639     needs:
640       - job: simple-build
641         artifacts: false 
642       - job: build-gcc-7-simd-sse41
643       - job: prepare-regressiontests
644     except:
645       variables:
646         - $GROMACS_RELEASE
647
648 test-clang-7:
649     extends:
650       - .test-clang
651       - .clang7-template
652     needs:
653       - job: simple-build
654         artifacts: false 
655       - job: build-clang-7
656       - job: prepare-regressiontests
657     except:
658       variables:
659         - $GROMACS_RELEASE
660
661 test-clang-7-gmxapi:
662     extends:
663       - .test-clang
664       - .gmxapi-extra-installs
665       - .clang7-template
666     needs:
667       - job: simple-build
668         artifacts: false 
669       - job: build-clang-7-gmxapi
670       - job: prepare-regressiontests
671     except:
672       variables:
673         - $GROMACS_RELEASE
674
675 test-clang-8:
676     extends:
677       - .test-clang
678       - .clang8-template
679     needs:
680       - job: simple-build
681         artifacts: false 
682       - job: build-clang-8
683       - job: prepare-regressiontests
684     except:
685       variables:
686         - $GROMACS_RELEASE
687
688 test-clang-6:
689     extends:
690       - .test-clang
691       - .clang6-template
692     variables:
693       REGRESSIONTEST_OMP_RANK_NUMBER: 0
694     needs:
695       - job: simple-build
696         artifacts: false 
697       - job: build-clang-6
698       - job: prepare-regressiontests
699     except:
700       variables:
701         - $GROMACS_RELEASE
702
703 # Jobs running in source checking stage
704 build-clang-tidy:
705   extends:
706     - .build-clang
707     - .clang7-template
708   stage: source-check
709   needs:
710     - job: simple-build
711       artifacts: false 
712     - job: configure-clang-tidy
713       artifacts: true
714   variables:
715       BUILD_DIR: build-clang-tidy
716       COMPILER_MAJOR_VERSION: 7
717       EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
718   except:
719     variables:
720       - $GROMACS_RELEASE
721
722 run-clang-format:
723   extends:
724     - .binary-build-template
725     - .no-cache-template
726     - .variables-template
727     - .tags-template
728     - .clang-before-script-template
729     - .build-clang-template
730     - .clang7-template
731   stage: source-check
732   when: always
733   needs:
734     - job: simple-build
735       artifacts: false 
736   variables:
737       KUBERNETES_CPU_LIMIT: 1
738       KUBERNETES_CPU_REQUEST: 1
739       KUBERNETES_MEMORY_LIMIT: 2Gi
740       COMPILER_MAJOR_VERSION: 7
741       EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION
742   except:
743     variables:
744       - $GROMACS_RELEASE
745   script:
746     - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
747     - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log
748     - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true
749     - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi
750   artifacts:
751     when: on_failure
752     paths:
753       - clang-format.log
754       - formatting.txt
755
756 run-copyright-check:
757   extends:
758     - .binary-build-template
759     - .no-cache-template
760     - .variables-template
761     - .tags-template
762     - .clang-before-script-template
763     - .build-clang-template
764     - .clang7-template
765       
766   stage: source-check
767   when: always
768   needs:
769     - job: simple-build
770       artifacts: false 
771   variables:
772       KUBERNETES_CPU_LIMIT: 1
773       KUBERNETES_CPU_REQUEST: 1
774       KUBERNETES_MEMORY_LIMIT: 2Gi
775   except:
776     variables:
777       - $GROMACS_RELEASE
778   script:
779     - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log
780     - grep -iq "copyright year" copyright.log | tee years.log || true
781     - grep -iq "copyright header" copyright.log | tee headers.log || true
782     - if [[ -s years.log || -s headers.log ]] ; then
783       echo "Copyright information needs updating" ;
784       exit 1 ;
785       fi
786   artifacts:
787     when: on_failure
788     paths:
789       - copyright.log
790       - years.log
791       - headers.log
792
793 run-check-source:
794   extends:
795     - .no-cache-template
796     - .variables-template
797     - .tags-template
798     - .build-docs-binary-template
799     - .documentation-before-script-template
800   stage: source-check
801   needs:
802     - job: simple-build
803       artifacts: false 
804     - job: build-docs
805       artifacts: true
806   variables:
807     KUBERNETES_CPU_LIMIT: 1
808     KUBERNETES_CPU_REQUEST: 1
809     KUBERNETES_MEMORY_LIMIT: 2Gi
810     BUILD_DIR: build-docs
811     COMPILER_MAJOR_VERSION: 7
812   except:
813     variables:
814       - $GROMACS_RELEASE
815
816   script:
817     - cd $BUILD_DIR
818     - cmake --build . --target check-source
819     - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true
820     - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
821     - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi
822   artifacts:
823     name: docs-artifacts-$CI_COMMIT_REF_SLUG
824     when: always
825     expire_in: 1 week
826     paths:
827       - $BUILD_DIR/docs/doxygen/doxygen-xml.log
828       - $BUILD_DIR/docs/doxygen/check-source.log
829
830 # Jobs running during documentation build stage
831 build-docs:
832   extends:
833     - .build-docs-binary
834   stage: documentation
835   needs:
836     - job: simple-build
837       artifacts: false 
838     - job: configure-docs
839       artifacts: true
840   variables:
841     BUILD_DIR: build-docs
842   except:
843     variables:
844       - $GROMACS_RELEASE
845
846 build-docs-gmxapi:
847     extends:
848       - .build-docs-binary
849       - .gmxapi-extra-installs
850     stage: documentation
851     needs:
852       - job: simple-build
853         artifacts: false 
854       - job: configure-docs-gmxapi
855         artifacts: true
856     variables:
857         BUILD_DIR: build-docs-gmxapi
858     except:
859       variables:
860         - $GROMACS_RELEASE
861
862 # Jobs running in post-test stage
863
864 # The manual build is built separately so that errors in converting
865 # Sphinx to LaTeX and compiling can always be found in the
866 # all-output.txt file, while avoiding many thousands of lines of spam
867 # from pdflatex for normal builds. This does reduce the available
868 # parallel utilization, and so increases the build time.
869 #
870 # TODO why are the doxygen and sphinx log files disappearing
871 # TODO use a feature from gitlab runner instead of using pipefail to get timings for the job
872 webpage:
873   extends:
874     - .build-docs-webpage
875   stage: post-test
876   needs:
877     - job: build-docs
878       artifacts: true
879     - job: run-check-source
880       artifacts: false
881   variables:
882     BUILD_DIR: build-docs
883   except:
884     variables:
885       - $GROMACS_RELEASE
886
887 webpage-gmxapi:
888   extends:
889     - .build-docs-webpage
890     - .gmxapi-extra-installs
891   stage: post-test
892   needs:
893     - job: build-docs-gmxapi
894       artifacts: true
895     - job: run-check-source
896       artifacts: false
897   variables:
898     BUILD_DIR: build-docs-gmxapi
899   except:
900     variables:
901       - $GROMACS_RELEASE
902
903
904 # Jobs running in release stage
905 linkchecker:
906   extends:
907     - .build-docs-webpage
908   stage: nightly-build
909   dependencies:
910     - webpage-gmxapi
911   only:
912     - web
913     - schedules
914     - triggers
915     - merge_requests
916   except:
917     variables:
918       - $GROMACS_RELEASE
919   variables:
920       KUBERNETES_CPU_LIMIT: 1
921       KUBERNETES_CPU_REQUEST: 1
922       KUBERNETES_MEMORY_LIMIT: 2Gi
923       BUILD_DIR: build-docs-gmxapi
924   script:
925       - cd $BUILD_DIR
926       - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full
927         --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources
928         -o xml 
929   artifacts:
930     reports:
931       junit: $BUILD_DIR/linkchecker-out.xml
932
933 build-archive-nightly:
934     extends:
935       - .build-archive
936     stage: nightly-build
937     needs:
938       - job: simple-build
939         artifacts: false 
940       - job: configure-archive-nightly
941         artifacts: true
942     only:
943       - web
944       - triggers
945       - schedules
946     except:
947       variables:
948         - $GROMACS_RELEASE
949     variables:
950         BUILD_DIR: build-package
951
952 webpage-nightly:
953     extends:
954       - .build-docs-webpage
955       - .configure-gmxapi-template
956     stage: nightly-deploy
957     only:
958       - web
959       - triggers
960       - schedules
961     except:
962       variables:
963         - $GROMACS_RELEASE
964     needs:
965       - job: simple-build
966         artifacts: false 
967       - job: linkchecker
968         artifacts: false
969       - job: webpage-gmxapi
970         artifacts: true
971     variables:
972         BUILD_DIR: build-docs-gmxapi
973     script:
974         - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
975     artifacts:
976       when: always
977       paths:
978         - webpage.tar.gz
979
980 package-regressiontests-release:
981     extends:
982       - .regressiontests-prepare-extends-template
983       - .regressiontests-release-template
984     needs:
985       - job: prepare-release-version
986         artifacts: true
987
988     only:
989       refs:
990         - triggers
991         - web
992         - schedules
993       variables:
994         - $GROMACS_RELEASE
995
996
997 package-archive-release:
998     extends:
999       - .build-archive
1000     stage: release-package
1001     needs:
1002       - job: configure-archive-release
1003         artifacts: true
1004     only:
1005       refs:
1006         - triggers
1007         - web
1008         - schedules
1009       variables:
1010         - $GROMACS_RELEASE
1011     variables:
1012         BUILD_DIR: build-package
1013
1014 release-verify:
1015     extends:
1016       - .regressiontests-prepare-extends-template
1017       - .release-verify-template
1018
1019     only:
1020       refs:
1021         - triggers
1022         - web
1023         - schedules
1024       variables:
1025         - $GROMACS_RELEASE
1026     dependencies:
1027       - package-archive-release
1028       - package-regressiontests-release
1029       - prepare-release-version
1030
1031 webpage-configure-release:
1032     extends:
1033       - .configure-docs-release
1034       - .configure-gmxapi-template
1035       - .no-cache-template
1036     only:
1037       refs:
1038         - web
1039         - schedules
1040         - triggers
1041       variables:
1042         - $GROMACS_RELEASE
1043     dependencies:
1044       - package-archive-release
1045       - package-regressiontests-release
1046       - prepare-release-version
1047     variables:
1048       CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
1049
1050 configure-gcc-7-release:
1051     extends:
1052       - .configure-gcc-release
1053       - .no-cache-template
1054       - .gcc7-template
1055     variables:
1056         COMPILER_MAJOR_VERSION: 7
1057         RELEASE_BUILD_DIR: release-builds-gcc
1058     only:
1059       refs:
1060         - web
1061         - schedules
1062         - triggers
1063       variables:
1064         - $GROMACS_RELEASE
1065     dependencies:
1066       - package-archive-release
1067       - package-regressiontests-release
1068       - prepare-release-version
1069
1070 configure-gcc-7-gmxapi-release:
1071     extends:
1072       - .configure-gcc-release
1073       - .configure-gmxapi-template
1074       - .no-cache-template
1075       - .gcc7-template
1076     variables:
1077         COMPILER_MAJOR_VERSION: 7
1078         RELEASE_BUILD_DIR: release-builds-gcc
1079     only:
1080       refs:
1081         - web
1082         - schedules
1083         - triggers
1084       variables:
1085         - $GROMACS_RELEASE
1086     dependencies:
1087       - package-archive-release
1088       - package-regressiontests-release
1089       - prepare-release-version
1090
1091 configure-gcc-7-double-release:
1092     extends:
1093       - .configure-gcc-release
1094       - .no-cache-template
1095       - .gcc7-template
1096     variables:
1097         COMPILER_MAJOR_VERSION: 7
1098         CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
1099         RELEASE_BUILD_DIR: release-builds-gcc
1100     only:
1101       refs:
1102         - web
1103         - schedules
1104         - triggers
1105       variables:
1106         - $GROMACS_RELEASE
1107     dependencies:
1108       - package-archive-release
1109       - package-regressiontests-release
1110       - prepare-release-version
1111
1112 configure-gcc-8-release:
1113     extends:
1114       - .configure-gcc-release
1115       - .no-cache-template
1116       - .gcc8-template
1117     variables:
1118         COMPILER_MAJOR_VERSION: 8
1119         RELEASE_BUILD_DIR: release-builds-gcc
1120     only:
1121       refs:
1122         - web
1123         - schedules
1124         - triggers
1125       variables:
1126         - $GROMACS_RELEASE
1127     dependencies:
1128       - package-archive-release
1129       - package-regressiontests-release
1130       - prepare-release-version
1131
1132 configure-clang-7-release:
1133     extends:
1134       - .configure-clang-release
1135       - .no-cache-template
1136       - .clang7-template
1137     variables:
1138         COMPILER_MAJOR_VERSION: 7
1139         RELEASE_BUILD_DIR: release-builds-clang
1140     only:
1141       refs:
1142         - web
1143         - schedules
1144         - triggers
1145       variables:
1146         - $GROMACS_RELEASE
1147     dependencies:
1148       - package-archive-release
1149       - package-regressiontests-release
1150       - prepare-release-version
1151
1152 configure-clang-7-gmxapi-release:
1153     extends:
1154       - .configure-clang-release
1155       - .configure-gmxapi-template
1156       - .no-cache-template
1157       - .clang7-template
1158     variables:
1159         COMPILER_MAJOR_VERSION: 7
1160         RELEASE_BUILD_DIR: release-builds-clang
1161     only:
1162       refs:
1163         - web
1164         - schedules
1165         - triggers
1166       variables:
1167         - $GROMACS_RELEASE
1168     dependencies:
1169       - package-archive-release
1170       - package-regressiontests-release
1171       - prepare-release-version
1172
1173 configure-clang-8-release:
1174     extends:
1175       - .configure-clang-release
1176       - .no-cache-template
1177       - .clang8-template
1178     variables:
1179         COMPILER_MAJOR_VERSION: 8
1180         RELEASE_BUILD_DIR: release-builds-clang
1181     only:
1182       refs:
1183         - web
1184         - schedules
1185         - triggers
1186       variables:
1187         - $GROMACS_RELEASE
1188     dependencies:
1189       - package-archive-release
1190       - package-regressiontests-release
1191       - prepare-release-version
1192
1193 build-gcc-7-release:
1194     extends:
1195       - .build-gcc
1196       - .gcc7-template
1197     stage: release-build
1198     variables:
1199         BUILD_DIR: release-builds-gcc
1200     needs:
1201       - job: configure-gcc-7-release
1202         artifacts: true
1203     only:
1204       refs:
1205         - web
1206         - schedules
1207         - triggers
1208       variables:
1209         - $GROMACS_RELEASE
1210
1211 build-gcc-7-gmxapi-release:
1212     extends:
1213       - .build-gcc
1214       - .gmxapi-extra-installs
1215       - .gcc7-template
1216     stage: release-build
1217     variables:
1218         BUILD_DIR: release-builds-gcc
1219     needs:
1220       - job: configure-gcc-7-gmxapi-release
1221         artifacts: true
1222     only:
1223       refs:
1224         - web
1225         - schedules
1226         - triggers
1227       variables:
1228         - $GROMACS_RELEASE
1229
1230 build-gcc-7-double-release:
1231     extends:
1232       - .build-gcc
1233       - .gcc7-template
1234     stage: release-build
1235     variables:
1236         BUILD_DIR: release-builds-gcc
1237     needs:
1238       - job: configure-gcc-7-double-release
1239         artifacts: true
1240     only:
1241       refs:
1242         - web
1243         - schedules
1244         - triggers
1245       variables:
1246         - $GROMACS_RELEASE
1247
1248 build-gcc-8-release:
1249     extends:
1250       - .build-gcc
1251       - .gcc8-template
1252     stage: release-build
1253     variables:
1254         BUILD_DIR: release-builds-gcc
1255     needs:
1256       - job: configure-gcc-8-release
1257         artifacts: true
1258     only:
1259       refs:
1260         - web
1261         - schedules
1262         - triggers
1263       variables:
1264         - $GROMACS_RELEASE
1265
1266 build-clang-7-release:
1267     extends:
1268       - .build-clang
1269       - .clang7-template
1270     stage: release-build
1271     variables:
1272         BUILD_DIR: release-builds-clang
1273     needs:
1274       - job: configure-clang-7-release
1275         artifacts: true
1276     only:
1277       refs:
1278         - web
1279         - schedules
1280         - triggers
1281       variables:
1282         - $GROMACS_RELEASE
1283
1284 build-clang-7-gmxapi-release:
1285     extends:
1286       - .build-clang
1287       - .gmxapi-extra-installs
1288       - .clang7-template
1289     stage: release-build
1290     variables:
1291         BUILD_DIR: release-builds-clang
1292     needs:
1293       - job: configure-clang-7-gmxapi-release
1294         artifacts: true
1295     only:
1296       refs:
1297         - web
1298         - schedules
1299         - triggers
1300       variables:
1301         - $GROMACS_RELEASE
1302
1303 build-clang-8-release:
1304     extends:
1305       - .build-clang
1306       - .clang8-template
1307     stage: release-build
1308     variables:
1309         BUILD_DIR: release-builds-clang
1310     needs:
1311       - job: configure-clang-8-release
1312         artifacts: true
1313     only:
1314       refs:
1315         - web
1316         - schedules
1317         - triggers
1318       variables:
1319         - $GROMACS_RELEASE
1320
1321 webpage-binary-release:
1322     extends:
1323       - .build-docs-binary
1324       - .gmxapi-extra-installs
1325     stage: release-build
1326     needs:
1327       - job: webpage-configure-release
1328         artifacts: true
1329     variables:
1330         BUILD_DIR: release-doc-builds
1331     only:
1332       refs:
1333         - triggers
1334         - web
1335         - schedules
1336       variables:
1337         - $GROMACS_RELEASE
1338
1339 test-gcc-7-release:
1340     extends:
1341       - .test-gcc
1342       - .gcc7-template
1343     stage: release-tests
1344     variables:
1345         BUILD_DIR: release-builds-gcc
1346     needs:
1347       - job: configure-gcc-7-release
1348         artifacts: true
1349       - job: build-gcc-7-release
1350         artifacts: true
1351       - job: prepare-regressiontests
1352     only:
1353       refs:
1354         - triggers
1355         - web
1356         - schedules
1357       variables:
1358         - $GROMACS_RELEASE
1359
1360 test-gcc-7-gmxapi-release:
1361     extends:
1362       - .test-gcc
1363       - .gmxapi-extra-installs
1364       - .gcc7-template
1365     stage: release-tests
1366     variables:
1367         BUILD_DIR: release-builds-gcc
1368     needs:
1369       - job: configure-gcc-7-gmxapi-release
1370         artifacts: true
1371       - job: build-gcc-7-gmxapi-release
1372         artifacts: true
1373       - job: prepare-regressiontests
1374     only:
1375       refs:
1376         - triggers
1377         - web
1378         - schedules
1379       variables:
1380         - $GROMACS_RELEASE
1381
1382 test-gcc-7-double-release:
1383     extends:
1384       - .test-gcc
1385       - .gcc7-template
1386     stage: release-tests
1387     variables:
1388         BUILD_DIR: release-builds-gcc
1389         REGRESSIONTEST_DOUBLE: "-double"
1390     needs:
1391       - job: configure-gcc-7-double-release
1392         artifacts: true
1393       - job: build-gcc-7-double-release
1394         artifacts: true
1395       - job: prepare-regressiontests
1396     only:
1397       refs:
1398         - triggers
1399         - web
1400         - schedules
1401       variables:
1402         - $GROMACS_RELEASE
1403
1404 test-gcc-8-release:
1405     extends:
1406       - .test-gcc
1407       - .gcc8-template
1408     stage: release-tests
1409     variables:
1410         BUILD_DIR: release-builds-gcc
1411     needs:
1412       - job: configure-gcc-8-release
1413         artifacts: true
1414       - job: build-gcc-8-release
1415         artifacts: true
1416       - job: prepare-regressiontests
1417     only:
1418       refs:
1419         - triggers
1420         - web
1421         - schedules
1422       variables:
1423         - $GROMACS_RELEASE
1424
1425 test-clang-7-release:
1426     extends:
1427       - .test-clang
1428       - .clang7-template
1429     stage: release-tests
1430     variables:
1431         BUILD_DIR: release-builds-clang
1432     needs:
1433       - job: configure-clang-7-release
1434         artifacts: true
1435       - job: build-clang-7-release
1436         artifacts: true
1437       - job: prepare-regressiontests
1438     only:
1439       refs:
1440         - triggers
1441         - web
1442         - schedules
1443       variables:
1444         - $GROMACS_RELEASE
1445
1446 test-clang-7-gmxapi-release:
1447     extends:
1448       - .test-clang
1449       - .gmxapi-extra-installs
1450       - .clang7-template
1451     stage: release-tests
1452     variables:
1453         BUILD_DIR: release-builds-clang
1454     needs:
1455       - job: configure-clang-7-gmxapi-release
1456         artifacts: true
1457       - job: build-clang-7-gmxapi-release
1458         artifacts: true
1459       - job: prepare-regressiontests
1460     only:
1461       refs:
1462         - triggers
1463         - web
1464         - schedules
1465       variables:
1466         - $GROMACS_RELEASE
1467
1468 test-clang-8-release:
1469     extends:
1470       - .test-clang
1471       - .clang8-template
1472     stage: release-tests
1473     variables:
1474         BUILD_DIR: release-builds-clang
1475     needs:
1476       - job: configure-clang-8-release
1477         artifacts: true
1478       - job: build-clang-8-release
1479         artifacts: true
1480       - job: prepare-regressiontests
1481     only:
1482       refs:
1483         - triggers
1484         - web
1485         - schedules
1486       variables:
1487         - $GROMACS_RELEASE
1488
1489 webpage-build-release:
1490   extends:
1491     - .build-docs-webpage
1492     - .configure-gmxapi-template
1493
1494   dependencies:
1495     - webpage-binary-release
1496     - webpage-configure-release
1497
1498   stage: release-prepare-deploy
1499   only:
1500     refs:
1501       - web
1502       - schedules
1503       - triggers
1504     variables:
1505       - $GROMACS_RELEASE
1506   variables:
1507       BUILD_DIR: release-doc-builds
1508
1509 webpage-archive-release:
1510     extends:
1511       - .build-docs-webpage
1512       - .configure-gmxapi-template
1513     stage: release-deploy
1514     only:
1515       refs:
1516         - web
1517         - triggers
1518         - schedules
1519       variables:
1520         - $GROMACS_RELEASE
1521     dependencies:
1522       - webpage-build-release
1523       - package-archive-release
1524       - package-regressiontests-release
1525     variables:
1526         BUILD_DIR: release-doc-builds
1527     script:
1528         - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
1529     artifacts:
1530       when: always
1531       paths:
1532         - webpage.tar.gz
1533         - gromacs-*tar.gz
1534         - regressiontests-*tar.gz
1535