gitlab-ci: Explicitly fetch target branch
[ghc.git] / .gitlab-ci.yml
1 variables:
2   GIT_SSL_NO_VERIFY: "1"
3
4   # Commit of ghc/ci-images repository from which to pull Docker images
5   DOCKER_REV: cefaee3c742af193e0f7783f87edb0d35374515c
6
7 before_script:
8   - python3 .gitlab/fix-submodules.py
9   - git submodule sync --recursive
10   - git submodule update --init --recursive
11   - git checkout .gitmodules
12   - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
13
14 stages:
15   - lint       # Source linting
16   - build      # A quick smoke-test to weed out broken commits
17   - full-build # Build all the things
18   - cleanup    # See Note [Cleanup on Windows]
19   - packaging  # Source distribution, etc.
20   - hackage    # head.hackage testing
21   - deploy     # push documentation
22
23 .only-default: &only-default
24   only:
25     - master
26     - /ghc-[0-9]+\.[0-9]+/
27     - merge_requests
28     - tags
29
30 ############################################################
31 # Runner Tags
32 ############################################################
33 #
34 # * x86_64-linux: Any Docker-capable x86_64 Linux machine
35 # * aarch64-linux: Any Docker-capable AArch64 Linux machine
36 # * x86_64-windows: A x86_64 Windows machine
37 # * lint: Any Docker-capable x86_64 Linux machine; distinct from
38 #         x86_64-linux to ensure low-latency availability.
39 #
40
41
42 ############################################################
43 # Linting
44 ############################################################
45
46 ghc-linters:
47   stage: lint
48   image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
49   script:
50     - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
51     - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
52     - "echo Merge base $base"
53     #    - validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
54     - validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
55     - .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
56     - .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
57   dependencies: []
58   tags:
59     - lint
60   only:
61     refs:
62       - merge_requests
63
64 # We allow the submodule checker to fail when run on merge requests (to
65 # accomodate, e.g., haddock changes not yet upstream) but not on `master` or
66 # Marge jobs.
67 .lint-submods:
68   stage: lint
69   image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
70   script:
71     - submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
72   dependencies: []
73   tags:
74     - lint
75
76 lint-submods:
77   extends: .lint-submods
78   only:
79     refs:
80       - master
81       - /ghc-[0-9]+\.[0-9]+/
82       - wip/marge_bot_batch_merge_job
83
84 lint-submods-mr:
85   extends: .lint-submods
86   allow_failure: true
87   only:
88     refs:
89       - merge_requests
90
91 ############################################################
92 # Validation via Pipelines (hadrian)
93 ############################################################
94
95 .validate-hadrian:
96   <<: *only-default
97   allow_failure: true
98   script:
99     - cabal update
100     - git clean -xdf && git submodule foreach git clean -xdf
101     - bash .circleci/prepare-system.sh
102     - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
103     - ./boot
104     - ./configure $CONFIGURE_ARGS
105     - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --docs=no-sphinx binary-dist
106     - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
107   cache:
108     key: hadrian
109     paths:
110       - cabal-cache
111   artifacts:
112     when: always
113     paths:
114       - ghc.tar.xz
115
116 validate-x86_64-linux-deb8-hadrian:
117   extends: .validate-hadrian
118   stage: build
119   image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
120   before_script:
121     # workaround for docker permissions
122     - sudo chown ghc:ghc -R .
123     - python3 .gitlab/fix-submodules.py
124     - git submodule sync --recursive
125     - git submodule update --init --recursive
126     - git checkout .gitmodules
127     - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
128   tags:
129     - x86_64-linux
130
131 hadrian-ghc-in-ghci:
132   <<: *only-default
133   stage: build
134   image: ghcci/x86_64-linux-deb8:0.1
135   before_script:
136     # workaround for docker permissions
137     - sudo chown ghc:ghc -R .
138     - python3 .gitlab/fix-submodules.py
139     - git submodule sync --recursive
140     - git submodule update --init --recursive
141     - git checkout .gitmodules
142   tags:
143     - x86_64-linux
144   script:
145     - cabal update
146     - git clean -xdf && git submodule foreach git clean -xdf
147     - bash .circleci/prepare-system.sh
148     - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
149     - ./boot
150     - ./configure $CONFIGURE_ARGS
151     # Load ghc-in-ghci then immediately exit
152     - echo ":q" | hadrian/ghci.sh
153   cache:
154     key: hadrian-ghci
155     paths:
156       - cabal-cache
157
158 ############################################################
159 # Validation via Pipelines (make)
160 ############################################################
161
162 .validate:
163   <<: *only-default
164   variables:
165     TEST_TYPE: test
166   before_script:
167     - git clean -xdf && git submodule foreach git clean -xdf
168   script:
169     - ./boot
170     - ./configure $CONFIGURE_ARGS
171     - |
172       THREADS=`mk/detect-cpu-count.sh`
173       make V=0 -j$THREADS WERROR=-Werror
174     - |
175       make binary-dist TAR_COMP_OPTS="-1"
176     - |
177       # Prepare to push git notes.
178       METRICS_FILE=$(mktemp)
179       git config user.email "ben+ghc-ci@smart-cactus.org"
180       git config user.name "GHC GitLab CI"
181     - |
182       THREADS=`mk/detect-cpu-count.sh`
183       make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml METRICS_FILE=$METRICS_FILE
184     - |
185       # Push git notes.
186       METRICS_FILE=$METRICS_FILE .gitlab/push-test-metrics.sh
187   dependencies: []
188   artifacts:
189     reports:
190       junit: junit.xml
191     expire_in: 2 week
192     paths:
193       - ghc-*.tar.xz
194       - junit.xml
195
196 #################################
197 # x86_64-darwin
198 #################################
199
200 validate-x86_64-darwin:
201   extends: .validate
202   stage: full-build
203   tags:
204     - x86_64-darwin
205   variables:
206     GHC_VERSION: 8.6.3
207     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-apple-darwin.tar.xz"
208     MACOSX_DEPLOYMENT_TARGET: "10.7"
209     # Only Sierra and onwards supports clock_gettime. See #12858
210     ac_cv_func_clock_gettime: "no"
211     LANG: "en_US.UTF-8"
212     CONFIGURE_ARGS: --with-intree-gmp
213     TEST_ENV: "x86_64-darwin"
214   before_script:
215     - git clean -xdf && git submodule foreach git clean -xdf
216     - python3 .gitlab/fix-submodules.py
217     - git submodule sync --recursive
218     - git submodule update --init --recursive
219     - git checkout .gitmodules
220     - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
221
222     - bash .gitlab/darwin-init.sh
223     - PATH="`pwd`/toolchain/bin:$PATH"
224   after_script:
225     - cp -Rf $HOME/.cabal cabal-cache
226   artifacts:
227     when: always
228     expire_in: 2 week
229   cache:
230     key: darwin
231     paths:
232       - cabal-cache
233       - toolchain
234
235 .validate-linux:
236   extends: .validate
237   tags:
238     - x86_64-linux
239   before_script:
240     - git clean -xdf && git submodule foreach git clean -xdf
241     - python3 .gitlab/fix-submodules.py
242     - git submodule sync --recursive
243     - git submodule update --init --recursive
244     - git checkout .gitmodules
245     - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
246
247     - bash .circleci/prepare-system.sh
248     # workaround for docker permissions
249     - sudo chown ghc:ghc -R .
250   after_script:
251     - cp -Rf $HOME/.cabal cabal-cache
252   cache:
253     key: linux
254     paths:
255       - cabal-cache
256       - toolchain
257
258 #################################
259 # aarch64-linux-deb9
260 #################################
261
262 .build-aarch64-linux-deb9:
263   extends: .validate-linux
264   stage: full-build
265   image: "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb9:$DOCKER_REV"
266   allow_failure: true
267   variables:
268     TEST_ENV: "aarch64-linux-deb9"
269     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-aarch64-linux-deb9.tar.xz"
270   cache:
271     key: linux-aarch64-deb9
272   tags:
273     - aarch64-linux
274
275 validate-aarch64-linux-deb9:
276   extends: .build-aarch64-linux-deb9
277   artifacts:
278     when: always
279     expire_in: 2 week
280
281 nightly-aarch64-linux-deb9:
282   extends: .build-aarch64-linux-deb9
283   artifacts:
284     expire_in: 2 year
285   variables:
286     TEST_TYPE: slowtest
287   only:
288     variables:
289       - $NIGHTLY
290
291 #################################
292 # i386-linux-deb9
293 #################################
294
295 .build-i386-linux-deb9:
296   extends: .validate-linux
297   stage: full-build
298   image: "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-deb9:$DOCKER_REV"
299   variables:
300     TEST_ENV: "i386-linux-deb9"
301     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-i386-deb9-linux.tar.xz"
302   cache:
303     key: linux-i386-deb9
304
305 validate-i386-linux-deb9:
306   extends: .build-i386-linux-deb9
307   artifacts:
308     when: always
309     expire_in: 2 week
310
311 nightly-i386-linux-deb9:
312   extends: .build-i386-linux-deb9
313   variables:
314     TEST_TYPE: slowtest
315   artifacts:
316     when: always
317     expire_in: 2 week
318   only:
319     variables:
320       - $NIGHTLY
321
322 #################################
323 # x86_64-linux-deb9
324 #################################
325
326 .build-x86_64-linux-deb9:
327   extends: .validate-linux
328   stage: full-build
329   image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb9:$DOCKER_REV"
330   variables:
331     TEST_ENV: "x86_64-linux-deb9"
332     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux.tar.xz"
333   cache:
334     key: linux-x86_64-deb9
335
336 validate-x86_64-linux-deb9:
337   extends: .build-x86_64-linux-deb9
338   artifacts:
339     when: always
340     expire_in: 2 week
341
342 nightly-x86_64-linux-deb9:
343   extends: .build-x86_64-linux-deb9
344   artifacts:
345     expire_in: 2 year
346   variables:
347     TEST_TYPE: slowtest
348   only:
349     variables:
350       - $NIGHTLY
351
352 # N.B. Has DEBUG assertions enabled in stage2
353 validate-x86_64-linux-deb9-debug:
354   extends: .build-x86_64-linux-deb9
355   stage: build
356   variables:
357     BUILD_FLAVOUR: validate
358     TEST_ENV: "x86_64-linux-deb9-debug"
359
360 validate-x86_64-linux-deb9-llvm:
361   extends: .build-x86_64-linux-deb9
362   stage: full-build
363   variables:
364     BUILD_FLAVOUR: perf-llvm
365     TEST_ENV: "x86_64-linux-deb9-llvm"
366
367 validate-x86_64-linux-deb9-integer-simple:
368   extends: .build-x86_64-linux-deb9
369   stage: full-build
370   variables:
371     INTEGER_LIBRARY: integer-simple
372     TEST_ENV: "x86_64-linux-deb9-integer-simple"
373     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux-integer-simple.tar.xz"
374
375 nightly-x86_64-linux-deb9-integer-simple:
376   extends: .build-x86_64-linux-deb9
377   stage: full-build
378   variables:
379     INTEGER_LIBRARY: integer-simple
380     TEST_ENV: "x86_64-linux-deb9-integer-simple"
381     TEST_TYPE: slowtest
382   artifacts:
383     expire_in: 2 year
384   only:
385     variables:
386       - $NIGHTLY
387
388 validate-x86_64-linux-deb9-unreg:
389   extends: .build-x86_64-linux-deb9
390   stage: full-build
391   variables:
392     CONFIGURE_ARGS: --enable-unregisterised
393     TEST_ENV: "x86_64-linux-deb9-unreg"
394
395
396 #################################
397 # x86_64-linux-deb8
398 #################################
399
400 release-x86_64-linux-deb8:
401   extends: .validate-linux
402   stage: full-build
403   image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
404   variables:
405     TEST_ENV: "x86_64-linux-deb8"
406     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb8-linux.tar.xz"
407   only:
408     - tags
409   cache:
410     key: linux-x86_64-deb8
411   artifacts:
412     when: always
413     expire_in: 2 week
414
415
416 #################################
417 # x86_64-linux-fedora27
418 #################################
419
420 validate-x86_64-linux-fedora27:
421   extends: .validate-linux
422   stage: full-build
423   image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora27:$DOCKER_REV"
424   variables:
425     TEST_ENV: "x86_64-linux-fedora27"
426     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-fedora27-linux.tar.xz"
427   cache:
428     key: linux-x86_64-fedora27
429   artifacts:
430     when: always
431     expire_in: 2 week
432
433 ############################################################
434 # Validation via Pipelines (Windows)
435 ############################################################
436
437 .build-windows:
438   <<: *only-default
439   before_script:
440     - git clean -xdf
441     - git submodule foreach git clean -xdf
442
443     # Use a local temporary directory to ensure that concurrent builds don't
444     # interfere with one another
445     - |
446       mkdir tmp
447       set TMP=%cd%\tmp
448       set TEMP=%cd%\tmp
449
450     - set PATH=C:\msys64\usr\bin;%PATH%
451     - python .gitlab/fix-submodules.py
452     - git submodule sync --recursive
453     - git submodule update --init --recursive
454     - git checkout .gitmodules
455     - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
456     - bash .gitlab/win32-init.sh
457   after_script:
458     - rd /s /q tmp
459     - robocopy /np /nfl /ndl /e "%APPDATA%\cabal" cabal-cache
460     - bash -c 'make clean || true'
461   dependencies: []
462   variables:
463     FORCE_SYMLINKS: 1
464     LANG: "en_US.UTF-8"
465   cache:
466     paths:
467       - cabal-cache
468       - ghc-8.6.2
469       - ghc-tarballs
470
471 .build-windows-hadrian:
472   extends: .build-windows
473   stage: full-build
474   variables:
475     GHC_VERSION: "8.6.2"
476   script:
477     - |
478       python boot
479       bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
480     - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick --docs=no-sphinx binary-dist"
481     - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
482     # FIXME: Testsuite disabled due to #16156.
483     # - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
484   tags:
485     - x86_64-windows
486   artifacts:
487     when: always
488     paths:
489       - ghc.tar.xz
490
491 validate-x86_64-windows-hadrian:
492   extends: .build-windows-hadrian
493   variables:
494     MSYSTEM: MINGW64
495   cache:
496     key: x86_64-windows-hadrian
497
498 nightly-i386-windows-hadrian:
499   extends: .build-windows-hadrian
500   variables:
501     MSYSTEM: MINGW32
502   only:
503     variables:
504       - $NIGHTLY
505   cache:
506     key: i386-windows-hadrian
507
508 .build-windows-make:
509   extends: .build-windows
510   stage: full-build
511   # due to #16084
512   allow_failure: true
513   variables:
514     BUILD_FLAVOUR: "quick"
515     GHC_VERSION: "8.6.2"
516     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-mingw32.tar.xz"
517   script:
518     - |
519       python boot
520       bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex $CONFIGURE_ARGS'
521     - bash -c "echo include mk/flavours/${BUILD_FLAVOUR}.mk > mk/build.mk"
522     - bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
523     - bash -c "PATH=`pwd`/toolchain/bin:$PATH make binary-dist TAR_COMP_OPTS=-1"
524     - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
525   tags:
526     - x86_64-windows
527   artifacts:
528     when: always
529     expire_in: 2 week
530     reports:
531       junit: junit.xml
532     paths:
533       - ghc-*.tar.xz
534       - junit.xml
535
536 validate-x86_64-windows:
537   extends: .build-windows-make
538   variables:
539     MSYSTEM: MINGW64
540     CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
541   cache:
542     key: x86_64-windows
543
544 # Normal Windows validate builds are profiled; that won't do for releases.
545 release-x86_64-windows:
546   extends: validate-x86_64-windows
547   variables:
548     MSYSTEM: MINGW64
549     BUILD_FLAVOUR: "perf"
550     CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
551   only:
552     - tags
553
554 release-i386-windows:
555   extends: .build-windows-make
556   only:
557     - tags
558   variables:
559     MSYSTEM: MINGW32
560     BUILD_FLAVOUR: "perf"
561     CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
562   cache:
563     key: i386-windows
564
565 nightly-i386-windows:
566   extends: .build-windows-make
567   only:
568     variables:
569       - $NIGHTLY
570   variables:
571     MSYSTEM: MINGW32
572     CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
573   cache:
574     key: i386-windows
575
576 ############################################################
577 # Cleanup
578 ############################################################
579
580 # Note [Cleaning up after shell executor]
581 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
582 #
583 # As noted in [1], gitlab-runner's shell executor doesn't clean up its working
584 # directory after builds. Unfortunately, we are forced to use the shell executor
585 # on Windows. To avoid running out of disk space we add a stage at the end of
586 # the build to remove the \GitLabRunner\builds directory. Since we only run a
587 # single build at a time on Windows this should be safe.
588 #
589 # [1] https://gitlab.com/gitlab-org/gitlab-runner/issues/3856
590
591 # See Note [Cleanup after shell executor]
592 cleanup-windows:
593   <<: *only-default
594   stage: cleanup
595   tags:
596     - x86_64-windows
597   when: always
598   dependencies: []
599   before_script:
600     - echo "Time to clean up"
601   script:
602     - echo "Let's go"
603   after_script:
604     - set "BUILD_DIR=%CI_PROJECT_DIR%"
605     - set "BUILD_DIR=%BUILD_DIR:/=\%"
606     - echo "Cleaning %BUILD_DIR%"
607     - cd \GitLabRunner
608     # This is way more complicated than it should be:
609     # See https://stackoverflow.com/questions/1965787
610     - del %BUILD_DIR%\* /F /Q
611     - for /d %%p in (%BUILD_DIR%\*) do rd /Q /S "%%p"
612     - exit /b 0
613
614 # See Note [Cleanup after shell executor]
615 cleanup-darwin:
616   <<: *only-default
617   stage: cleanup
618   tags:
619     - x86_64-darwin
620   when: always
621   dependencies: []
622   before_script:
623     - echo "Time to clean up"
624   script:
625     - echo "Let's go"
626   after_script:
627     - BUILD_DIR=$CI_PROJECT_DIR
628     - echo "Cleaning $BUILD_DIR"
629     - cd $HOME
630     - rm -Rf $BUILD_DIR/*
631     - exit 0
632
633 ############################################################
634 # Packaging
635 ############################################################
636
637 doc-tarball:
638   <<: *only-default
639   stage: packaging
640   allow_failure: true
641   tags:
642     - x86_64-linux
643   image: ghcci/x86_64-linux-deb9:0.2
644   dependencies:
645     - validate-x86_64-linux-deb9
646     - validate-x86_64-windows
647   artifacts:
648     paths:
649       - haddock.html.tar.xz
650       - libraries.html.tar.xz
651       - users_guide.html.tar.xz
652       - index.html
653       - "*.pdf"
654   script:
655     - rm -Rf docs
656     - distrib/mkDocs/mkDocs ghc-x86_64-deb9-linux.tar.xz ghc-x86_64-mingw32.tar.xz
657     - ls -lh
658     - mv docs/*.tar.xz .
659
660 source-tarball:
661   stage: packaging
662   tags:
663     - x86_64-linux
664   image: ghcci/x86_64-linux-deb9:0.2
665   only:
666     - tags
667   artifacts:
668     paths:
669       - ghc-*.tar.xz
670       - version
671   script:
672     - mk/get-win32-tarballs.sh download all
673     - ./boot
674     - ./configure
675     - make sdist
676     - mv sdistprep/*.xz  .
677     - make show VALUE=version > version
678
679
680 ############################################################
681 # Testing via head.hackage
682 ############################################################
683
684 # Triggering jobs in the ghc/head.hackage project requires that we have a job
685 # token for that repository. Furthermore the head.hackage CI job must have
686 # access to an unprivileged access token with the ability to query the ghc/ghc
687 # project such that it can find the job ID of the fedora27 job for the current
688 # pipeline.
689
690 .hackage:
691   <<: *only-default
692   stage: hackage
693   image: ghcci/x86_64-linux-deb9:0.2
694   tags:
695     - x86_64-linux
696   dependencies: []
697   variables:
698     HEAD_HACKAGE_PROJECT_ID: "78"
699   script:
700     - bash .gitlab/start-head.hackage.sh
701
702 hackage:
703   extends: .hackage
704   when: manual
705
706 hackage-label:
707   extends: .hackage
708   only:
709     variables:
710       - $CI_MERGE_REQUEST_LABELS =~ /.*user-facing.*/
711
712 nightly-hackage:
713   extends: .hackage
714   only:
715     variables:
716       - $NIGHTLY
717
718 pages:
719   stage: deploy
720   dependencies:
721     - doc-tarball
722   image: ghcci/x86_64-linux-deb9:0.2
723   tags:
724     - x86_64-linux
725   script:
726     - mkdir -p public/doc
727     - tar -xf haddock.html.tar.xz -C public/doc
728     - tar -xf libraries.html.tar.xz -C public/doc
729     - tar -xf users_guide.html.tar.xz -C public/doc
730     - cp -f index.html public/doc
731   only:
732     - master
733   artifacts:
734     paths:
735       - public
736