dcb3fefd331ddbb1744eafc975bff8e6c2b7ec39
[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-clang
688     - .clang7-template
689   stage: source-check
690   needs:
691     - job: simple-build
692       artifacts: false
693     - job: configure-clang-tidy
694       artifacts: true
695   variables:
696     BUILD_DIR: build-clang-tidy
697     COMPILER_MAJOR_VERSION: 7
698     EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
699   except:
700     variables:
701       - $GROMACS_RELEASE
702
703 run-clang-format:
704   extends:
705     - .binary-build-template
706     - .no-cache-template
707     - .variables-template
708     - .tags-template
709     - .clang-before-script-template
710     - .build-clang-template
711     - .clang7-template
712   stage: source-check
713   when: always
714   needs:
715     - job: simple-build
716       artifacts: false
717   variables:
718     KUBERNETES_CPU_LIMIT: 1
719     KUBERNETES_CPU_REQUEST: 1
720     KUBERNETES_MEMORY_LIMIT: 2Gi
721     COMPILER_MAJOR_VERSION: 7
722     EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION
723   except:
724     variables:
725       - $GROMACS_RELEASE
726   script:
727     - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
728     - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log
729     - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true
730     - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi
731   artifacts:
732     when: on_failure
733     paths:
734       - clang-format.log
735       - formatting.txt
736
737 run-copyright-check:
738   extends:
739     - .binary-build-template
740     - .no-cache-template
741     - .variables-template
742     - .tags-template
743     - .clang-before-script-template
744     - .build-clang-template
745     - .clang7-template
746   stage: source-check
747   when: always
748   needs:
749     - job: simple-build
750       artifacts: false
751   variables:
752     KUBERNETES_CPU_LIMIT: 1
753     KUBERNETES_CPU_REQUEST: 1
754     KUBERNETES_MEMORY_LIMIT: 2Gi
755   except:
756     variables:
757       - $GROMACS_RELEASE
758   script:
759     - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log
760     - grep -iq "copyright year" copyright.log | tee years.log || true
761     - grep -iq "copyright header" copyright.log | tee headers.log || true
762     - if [[ -s years.log || -s headers.log ]] ; then
763       echo "Copyright information needs updating" ;
764       exit 1 ;
765       fi
766   artifacts:
767     when: on_failure
768     paths:
769       - copyright.log
770       - years.log
771       - headers.log
772
773 run-check-source:
774   extends:
775     - .no-cache-template
776     - .variables-template
777     - .tags-template
778     - .build-docs-binary-template
779     - .documentation-before-script-template
780   stage: source-check
781   needs:
782     - job: simple-build
783       artifacts: false
784     - job: build-docs
785       artifacts: true
786   variables:
787     KUBERNETES_CPU_LIMIT: 1
788     KUBERNETES_CPU_REQUEST: 1
789     KUBERNETES_MEMORY_LIMIT: 2Gi
790     BUILD_DIR: build-docs
791     COMPILER_MAJOR_VERSION: 7
792   except:
793     variables:
794       - $GROMACS_RELEASE
795   script:
796     - cd $BUILD_DIR
797     - cmake --build . --target check-source
798     - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true
799     - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
800     - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi
801   artifacts:
802     name: docs-artifacts-$CI_COMMIT_REF_SLUG
803     when: always
804     expire_in: 1 week
805     paths:
806       - $BUILD_DIR/docs/doxygen/doxygen-xml.log
807       - $BUILD_DIR/docs/doxygen/check-source.log
808
809 # Jobs running during documentation build stage
810 build-docs:
811   extends:
812     - .build-docs-binary
813   stage: documentation
814   needs:
815     - job: simple-build
816       artifacts: false
817     - job: configure-docs
818       artifacts: true
819   variables:
820     BUILD_DIR: build-docs
821   except:
822     variables:
823       - $GROMACS_RELEASE
824
825 build-docs-gmxapi:
826   extends:
827     - .build-docs-binary
828     - .gmxapi-extra-installs
829   stage: documentation
830   needs:
831     - job: simple-build
832       artifacts: false
833     - job: configure-docs-gmxapi
834       artifacts: true
835   variables:
836     BUILD_DIR: build-docs-gmxapi
837   except:
838     variables:
839       - $GROMACS_RELEASE
840
841 # Jobs running in post-test stage
842
843 # The manual build is built separately so that errors in converting
844 # Sphinx to LaTeX and compiling can always be found in the
845 # all-output.txt file, while avoiding many thousands of lines of spam
846 # from pdflatex for normal builds. This does reduce the available
847 # parallel utilization, and so increases the build time.
848 #
849 # TODO why are the doxygen and sphinx log files disappearing
850 # TODO use a feature from gitlab runner instead of using pipefail to get timings for the job
851 webpage:
852   extends:
853     - .build-docs-webpage
854   stage: post-test
855   needs:
856     - job: build-docs
857       artifacts: true
858     - job: run-check-source
859       artifacts: false
860   variables:
861     BUILD_DIR: build-docs
862   except:
863     variables:
864       - $GROMACS_RELEASE
865
866 webpage-gmxapi:
867   extends:
868     - .build-docs-webpage
869     - .gmxapi-extra-installs
870   stage: post-test
871   needs:
872     - job: build-docs-gmxapi
873       artifacts: true
874     - job: run-check-source
875       artifacts: false
876   variables:
877     BUILD_DIR: build-docs-gmxapi
878   except:
879     variables:
880       - $GROMACS_RELEASE
881
882
883 # Jobs running in release stage
884 linkchecker:
885   extends:
886     - .build-docs-webpage
887   stage: nightly-build
888   dependencies:
889     - webpage-gmxapi
890   only:
891     - schedules
892     - triggers
893     - merge_requests
894     - external_pull_requests
895   except:
896     variables:
897       - $GROMACS_RELEASE
898   variables:
899     KUBERNETES_CPU_LIMIT: 1
900     KUBERNETES_CPU_REQUEST: 1
901     KUBERNETES_MEMORY_LIMIT: 2Gi
902     BUILD_DIR: build-docs-gmxapi
903   script:
904     - cd $BUILD_DIR
905     - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full
906       --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources
907       -o xml
908   artifacts:
909     reports:
910       junit: $BUILD_DIR/linkchecker-out.xml
911
912 build-archive-nightly:
913   extends:
914     - .build-archive
915   stage: nightly-build
916   needs:
917     - job: simple-build
918       artifacts: false
919     - job: configure-archive-nightly
920       artifacts: true
921   only:
922     - triggers
923     - schedules
924   except:
925     variables:
926       - $GROMACS_RELEASE
927   variables:
928     BUILD_DIR: build-package
929
930 webpage-nightly:
931   extends:
932     - .build-docs-webpage
933     - .configure-gmxapi-template
934   stage: nightly-deploy
935   only:
936     - triggers
937     - schedules
938   except:
939     variables:
940       - $GROMACS_RELEASE
941   needs:
942     - job: simple-build
943       artifacts: false
944     - job: linkchecker
945       artifacts: false
946     - job: webpage-gmxapi
947       artifacts: true
948   variables:
949     BUILD_DIR: build-docs-gmxapi
950   script:
951     - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
952   artifacts:
953     when: always
954     paths:
955       - webpage.tar.gz
956
957 package-regressiontests-release:
958   extends:
959     - .regressiontests-extends-template
960     - .regressiontests-release-template
961   needs:
962     - job: prepare-release-version
963       artifacts: true
964   only:
965     refs:
966       - triggers
967       - web
968       - schedules
969     variables:
970       - $GROMACS_RELEASE
971
972
973 package-archive-release:
974   extends:
975     - .build-archive
976   stage: release-package
977   needs:
978     - job: configure-archive-release
979       artifacts: true
980   only:
981     refs:
982       - triggers
983       - web
984       - schedules
985     variables:
986       - $GROMACS_RELEASE
987   variables:
988     BUILD_DIR: build-package
989
990 release-verify:
991   extends:
992     - .regressiontests-extends-template
993     - .release-verify-template
994   only:
995     refs:
996       - triggers
997       - web
998       - schedules
999     variables:
1000       - $GROMACS_RELEASE
1001   dependencies:
1002     - package-archive-release
1003     - package-regressiontests-release
1004     - prepare-release-version
1005
1006 webpage-configure-release:
1007   extends:
1008     - .configure-docs-release
1009     - .configure-gmxapi-template
1010     - .no-cache-template
1011   only:
1012     refs:
1013       - web
1014       - schedules
1015       - triggers
1016     variables:
1017       - $GROMACS_RELEASE
1018   dependencies:
1019     - package-archive-release
1020     - package-regressiontests-release
1021     - prepare-release-version
1022   variables:
1023     CMAKE_EXTRA_OPTIONS: -DGMX_BUILD_HELP=on -DGMX_BUILD_MANUAL=on
1024
1025 configure-gcc-7-release:
1026   extends:
1027     - .configure-gcc-release
1028     - .no-cache-template
1029     - .gcc7-template
1030   variables:
1031     COMPILER_MAJOR_VERSION: 7
1032     RELEASE_BUILD_DIR: release-builds-gcc
1033   only:
1034     refs:
1035       - web
1036       - schedules
1037       - triggers
1038     variables:
1039       - $GROMACS_RELEASE
1040   dependencies:
1041     - package-archive-release
1042     - package-regressiontests-release
1043     - prepare-release-version
1044
1045 configure-gcc-7-gmxapi-release:
1046   extends:
1047     - .configure-gcc-release
1048     - .configure-gmxapi-template
1049     - .no-cache-template
1050     - .gcc7-template
1051   variables:
1052     COMPILER_MAJOR_VERSION: 7
1053     RELEASE_BUILD_DIR: release-builds-gcc
1054   only:
1055     refs:
1056       - web
1057       - schedules
1058       - triggers
1059     variables:
1060       - $GROMACS_RELEASE
1061   dependencies:
1062     - package-archive-release
1063     - package-regressiontests-release
1064     - prepare-release-version
1065
1066 configure-gcc-7-double-release:
1067   extends:
1068     - .configure-gcc-release
1069     - .no-cache-template
1070     - .gcc7-template
1071   variables:
1072     COMPILER_MAJOR_VERSION: 7
1073     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
1074     RELEASE_BUILD_DIR: release-builds-gcc
1075   only:
1076     refs:
1077       - web
1078       - schedules
1079       - triggers
1080     variables:
1081       - $GROMACS_RELEASE
1082   dependencies:
1083     - package-archive-release
1084     - package-regressiontests-release
1085     - prepare-release-version
1086
1087 configure-gcc-8-release:
1088   extends:
1089     - .configure-gcc-release
1090     - .no-cache-template
1091     - .gcc8-template
1092   variables:
1093     COMPILER_MAJOR_VERSION: 8
1094     RELEASE_BUILD_DIR: release-builds-gcc
1095   only:
1096     refs:
1097       - web
1098       - schedules
1099       - triggers
1100     variables:
1101       - $GROMACS_RELEASE
1102   dependencies:
1103     - package-archive-release
1104     - package-regressiontests-release
1105     - prepare-release-version
1106
1107 configure-clang-7-release:
1108   extends:
1109     - .configure-clang-release
1110     - .no-cache-template
1111     - .clang7-template
1112   variables:
1113     COMPILER_MAJOR_VERSION: 7
1114     RELEASE_BUILD_DIR: release-builds-clang
1115   only:
1116     refs:
1117       - web
1118       - schedules
1119       - triggers
1120     variables:
1121       - $GROMACS_RELEASE
1122   dependencies:
1123     - package-archive-release
1124     - package-regressiontests-release
1125     - prepare-release-version
1126
1127 configure-clang-7-gmxapi-release:
1128   extends:
1129     - .configure-clang-release
1130     - .configure-gmxapi-template
1131     - .no-cache-template
1132     - .clang7-template
1133   variables:
1134     COMPILER_MAJOR_VERSION: 7
1135     RELEASE_BUILD_DIR: release-builds-clang
1136   only:
1137     refs:
1138       - web
1139       - schedules
1140       - triggers
1141     variables:
1142       - $GROMACS_RELEASE
1143   dependencies:
1144     - package-archive-release
1145     - package-regressiontests-release
1146     - prepare-release-version
1147
1148 configure-clang-8-release:
1149   extends:
1150     - .configure-clang-release
1151     - .no-cache-template
1152     - .clang8-template
1153   variables:
1154     COMPILER_MAJOR_VERSION: 8
1155     RELEASE_BUILD_DIR: release-builds-clang
1156   only:
1157     refs:
1158       - web
1159       - schedules
1160       - triggers
1161     variables:
1162       - $GROMACS_RELEASE
1163   dependencies:
1164     - package-archive-release
1165     - package-regressiontests-release
1166     - prepare-release-version
1167
1168 build-gcc-7-release:
1169   extends:
1170     - .build-gcc
1171     - .gcc7-template
1172   stage: release-build
1173   variables:
1174     BUILD_DIR: release-builds-gcc
1175   needs:
1176     - job: configure-gcc-7-release
1177       artifacts: true
1178   only:
1179     refs:
1180       - web
1181       - schedules
1182       - triggers
1183     variables:
1184       - $GROMACS_RELEASE
1185
1186 build-gcc-7-gmxapi-release:
1187   extends:
1188     - .build-gcc
1189     - .gmxapi-extra-installs
1190     - .gcc7-template
1191   stage: release-build
1192   variables:
1193     BUILD_DIR: release-builds-gcc
1194   needs:
1195     - job: configure-gcc-7-gmxapi-release
1196       artifacts: true
1197   only:
1198     refs:
1199       - web
1200       - schedules
1201       - triggers
1202     variables:
1203       - $GROMACS_RELEASE
1204
1205 build-gcc-7-double-release:
1206   extends:
1207     - .build-gcc
1208     - .gcc7-template
1209   stage: release-build
1210   variables:
1211     BUILD_DIR: release-builds-gcc
1212   needs:
1213     - job: configure-gcc-7-double-release
1214       artifacts: true
1215   only:
1216     refs:
1217       - web
1218       - schedules
1219       - triggers
1220     variables:
1221       - $GROMACS_RELEASE
1222
1223 build-gcc-8-release:
1224   extends:
1225     - .build-gcc
1226     - .gcc8-template
1227   stage: release-build
1228   variables:
1229     BUILD_DIR: release-builds-gcc
1230   needs:
1231     - job: configure-gcc-8-release
1232       artifacts: true
1233   only:
1234     refs:
1235       - web
1236       - schedules
1237       - triggers
1238     variables:
1239       - $GROMACS_RELEASE
1240
1241 build-clang-7-release:
1242   extends:
1243     - .build-clang
1244     - .clang7-template
1245   stage: release-build
1246   variables:
1247     BUILD_DIR: release-builds-clang
1248   needs:
1249     - job: configure-clang-7-release
1250       artifacts: true
1251   only:
1252     refs:
1253       - web
1254       - schedules
1255       - triggers
1256     variables:
1257       - $GROMACS_RELEASE
1258
1259 build-clang-7-gmxapi-release:
1260   extends:
1261     - .build-clang
1262     - .gmxapi-extra-installs
1263     - .clang7-template
1264   stage: release-build
1265   variables:
1266     BUILD_DIR: release-builds-clang
1267   needs:
1268     - job: configure-clang-7-gmxapi-release
1269       artifacts: true
1270   only:
1271     refs:
1272       - web
1273       - schedules
1274       - triggers
1275     variables:
1276       - $GROMACS_RELEASE
1277
1278 build-clang-8-release:
1279   extends:
1280     - .build-clang
1281     - .clang8-template
1282   stage: release-build
1283   variables:
1284     BUILD_DIR: release-builds-clang
1285   needs:
1286     - job: configure-clang-8-release
1287       artifacts: true
1288   only:
1289     refs:
1290       - web
1291       - schedules
1292       - triggers
1293     variables:
1294       - $GROMACS_RELEASE
1295
1296 webpage-binary-release:
1297   extends:
1298     - .build-docs-binary
1299     - .gmxapi-extra-installs
1300   stage: release-build
1301   needs:
1302     - job: webpage-configure-release
1303       artifacts: true
1304   variables:
1305     BUILD_DIR: release-doc-builds
1306   only:
1307     refs:
1308       - triggers
1309       - web
1310       - schedules
1311     variables:
1312       - $GROMACS_RELEASE
1313
1314 test-gcc-7-release:
1315   extends:
1316     - .test-gcc
1317     - .gcc7-template
1318   stage: release-tests
1319   variables:
1320     BUILD_DIR: release-builds-gcc
1321   needs:
1322     - job: configure-gcc-7-release
1323       artifacts: true
1324     - job: build-gcc-7-release
1325       artifacts: true
1326   only:
1327     refs:
1328       - triggers
1329       - web
1330       - schedules
1331     variables:
1332       - $GROMACS_RELEASE
1333
1334 test-gcc-7-gmxapi-release:
1335   extends:
1336     - .test-gcc
1337     - .gmxapi-extra-installs
1338     - .gcc7-template
1339   stage: release-tests
1340   variables:
1341     BUILD_DIR: release-builds-gcc
1342   needs:
1343     - job: configure-gcc-7-gmxapi-release
1344       artifacts: true
1345     - job: build-gcc-7-gmxapi-release
1346       artifacts: true
1347   only:
1348     refs:
1349       - triggers
1350       - web
1351       - schedules
1352     variables:
1353       - $GROMACS_RELEASE
1354
1355 test-gcc-7-double-release:
1356   extends:
1357     - .test-gcc
1358     - .gcc7-template
1359   stage: release-tests
1360   variables:
1361     BUILD_DIR: release-builds-gcc
1362   needs:
1363     - job: configure-gcc-7-double-release
1364       artifacts: true
1365     - job: build-gcc-7-double-release
1366       artifacts: true
1367   only:
1368     refs:
1369       - triggers
1370       - web
1371       - schedules
1372     variables:
1373       - $GROMACS_RELEASE
1374
1375 test-gcc-8-release:
1376   extends:
1377     - .test-gcc
1378     - .gcc8-template
1379   stage: release-tests
1380   variables:
1381     BUILD_DIR: release-builds-gcc
1382   needs:
1383     - job: configure-gcc-8-release
1384       artifacts: true
1385     - job: build-gcc-8-release
1386       artifacts: true
1387   only:
1388     refs:
1389       - triggers
1390       - web
1391       - schedules
1392     variables:
1393       - $GROMACS_RELEASE
1394
1395 test-clang-7-release:
1396   extends:
1397     - .test-clang
1398     - .clang7-template
1399   stage: release-tests
1400   variables:
1401     BUILD_DIR: release-builds-clang
1402   needs:
1403     - job: configure-clang-7-release
1404       artifacts: true
1405     - job: build-clang-7-release
1406       artifacts: true
1407   only:
1408     refs:
1409       - triggers
1410       - web
1411       - schedules
1412     variables:
1413       - $GROMACS_RELEASE
1414
1415 test-clang-7-gmxapi-release:
1416   extends:
1417     - .test-clang
1418     - .gmxapi-extra-installs
1419     - .clang7-template
1420   stage: release-tests
1421   variables:
1422     BUILD_DIR: release-builds-clang
1423   needs:
1424     - job: configure-clang-7-gmxapi-release
1425       artifacts: true
1426     - job: build-clang-7-gmxapi-release
1427       artifacts: true
1428   only:
1429     refs:
1430       - triggers
1431       - web
1432       - schedules
1433     variables:
1434       - $GROMACS_RELEASE
1435
1436 test-clang-8-release:
1437   extends:
1438     - .test-clang
1439     - .clang8-template
1440   stage: release-tests
1441   variables:
1442     BUILD_DIR: release-builds-clang
1443   needs:
1444     - job: configure-clang-8-release
1445       artifacts: true
1446     - job: build-clang-8-release
1447       artifacts: true
1448   only:
1449     refs:
1450       - triggers
1451       - web
1452       - schedules
1453     variables:
1454       - $GROMACS_RELEASE
1455
1456 webpage-build-release:
1457   extends:
1458     - .build-docs-webpage
1459     - .configure-gmxapi-template
1460   dependencies:
1461     - webpage-binary-release
1462     - webpage-configure-release
1463   stage: release-prepare-deploy
1464   only:
1465     refs:
1466       - web
1467       - schedules
1468       - triggers
1469     variables:
1470       - $GROMACS_RELEASE
1471   variables:
1472     BUILD_DIR: release-doc-builds
1473
1474 webpage-archive-release:
1475   extends:
1476     - .build-docs-webpage
1477     - .configure-gmxapi-template
1478   stage: release-deploy
1479   only:
1480     refs:
1481       - web
1482       - triggers
1483       - schedules
1484     variables:
1485       - $GROMACS_RELEASE
1486   dependencies:
1487     - webpage-build-release
1488     - package-archive-release
1489     - package-regressiontests-release
1490   variables:
1491     BUILD_DIR: release-doc-builds
1492   script:
1493     - tar czf webpage.tar.gz $BUILD_DIR/docs/html/
1494   artifacts:
1495     when: always
1496     paths:
1497       - webpage.tar.gz
1498       - gromacs-*tar.gz
1499       - regressiontests-*tar.gz
1500