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