summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-02-12 22:44:42 -0500
committerBen Gamari <ben@smart-cactus.org>2019-02-22 11:26:41 -0500
commit1ecd298fe48e52d56b925eddf69694462dd42e90 (patch)
treefe77e0235358b8e6aa40e013ceb3c4cb234e2574
parentb0d6948036c19eeeeed8d0cbd7dbf7e6cdcd2fa1 (diff)
downloadhaskell-1ecd298fe48e52d56b925eddf69694462dd42e90.tar.gz
gitlab-ci: Well-Typed CI
-rw-r--r--.gitlab-ci.yml437
1 files changed, 21 insertions, 416 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 162c19ccb6..b94d2afdc2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,429 +1,34 @@
variables:
- GIT_SSL_NO_VERIFY: "1"
+ THREADS: 9
before_script:
- - python3 .gitlab/fix-submodules.py
+ # workaround for docker permissions
+ - sudo chown ghc:ghc -R .
+
+ - sed -i -e 's%url *= *\.\./%url = https://git.haskell.org/%' .gitmodules
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
-stages:
- - lint
- - build
- - full-build
- - cleanup # See Note [Cleanup on Windows]
-
-############################################################
-# Runner Tags
-############################################################
-#
-# * x86_64-linux: Any Docker-capable x86_64 Linux machine
-# * aarch64-linux: Any Docker-capable AArch64 Linux machine
-# * x86_64-windows: A x86_64 Windows machine
-# * lint: Any Docker-capable x86_64 Linux machine; distinct from
-# x86_64-linux to ensure low-latency availability.
-#
-
-
-############################################################
-# Linting
-############################################################
-
-ghc-linters:
- stage: lint
- image: ghcci/linters:0.1
- script:
- - |
- if [ -n "$CI_MERGE_REQUEST_ID" ]; then
- base="$(git merge-base $CI_MERGE_REQUEST_BRANCH_NAME HEAD)"
- validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
- submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
- validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
- .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
- .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
- fi
- tags:
- - lint
+ - make clean || true
+ - ./boot
+ - ./configure
-############################################################
-# Validation via Pipelines (hadrian)
-############################################################
-
-.validate-hadrian:
- allow_failure: true
- script:
- - git clean -xdf && git submodule foreach git clean -xdf
- - bash .circleci/prepare-system.sh
- - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
- - ./boot
- - ./configure $CONFIGURE_ARGS
- - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh`
- cache:
- key: hadrian
- paths:
- - cabal-cache
-
-validate-x86_64-linux-deb8-hadrian:
- extends: .validate-hadrian
- stage: build
- image: ghcci/x86_64-linux-deb8:0.1
- before_script:
- # workaround for docker permissions
- - sudo chown ghc:ghc -R .
- - python3 .gitlab/fix-submodules.py
- - git submodule sync --recursive
- - git submodule update --init --recursive
- - git checkout .gitmodules
- tags:
- - x86_64-linux
-
-############################################################
-# Validation via Pipelines (make)
-############################################################
-
-.validate:
- variables:
- TEST_TYPE: test
- before_script:
- - git clean -xdf && git submodule foreach git clean -xdf
+validate:
+ image: ghcci/x86_64-linux-deb9:0.2
script:
- - ./boot
- - ./configure $CONFIGURE_ARGS
- |
- THREADS=`mk/detect-cpu-count.sh`
- make V=0 -j$THREADS
- - |
- make binary-dist TAR_COMP_OPTS="-1"
- mv ghc-*.tar.xz ghc.tar.xz
- - |
- THREADS=`mk/detect-cpu-count.sh`
- make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml
- artifacts:
- reports:
- junit: junit.xml
- expire_in: 2 week
- paths:
- - ghc.tar.xz
- - junit.xml
-
-validate-x86_64-darwin:
- extends: .validate
- stage: full-build
- allow_failure: true
- tags:
- - x86_64-darwin
- variables:
- GHC_VERSION: 8.6.3
- MACOSX_DEPLOYMENT_TARGET: "10.7"
- # Only Sierra and onwards supports clock_gettime. See #12858
- ac_cv_func_clock_gettime: "no"
- LANG: "en_US.UTF-8"
- before_script:
- - git clean -xdf && git submodule foreach git clean -xdf
- - python3 .gitlab/fix-submodules.py
- - git submodule sync --recursive
- - git submodule update --init --recursive
- - git checkout .gitmodules
-
- - bash .gitlab/darwin-init.sh
- - PATH="`pwd`/toolchain/bin:$PATH"
- - echo "libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-intree-gmp" >> mk/build.mk
- after_script:
- - cp -Rf $HOME/.cabal cabal-cache
- artifacts:
- when: always
- expire_in: 2 week
- cache:
- key: darwin
- paths:
- - cabal-cache
- - toolchain
-
-.validate-linux:
- extends: .validate
- tags:
- - x86_64-linux
- before_script:
- - git clean -xdf && git submodule foreach git clean -xdf
- - python3 .gitlab/fix-submodules.py
- - git submodule sync --recursive
- - git submodule update --init --recursive
- - git checkout .gitmodules
-
- - bash .circleci/prepare-system.sh
- # workaround for docker permissions
- - sudo chown ghc:ghc -R .
- after_script:
- - cp -Rf $HOME/.cabal cabal-cache
- cache:
- key: linux
- paths:
- - cabal-cache
- - toolchain
-
-validate-aarch64-linux-deb9:
- extends: .validate-linux
- stage: full-build
- image: ghcci/aarch64-linux-deb9:0.1
- allow_failure: true
- artifacts:
- when: always
- expire_in: 2 week
- cache:
- key: linux-aarch64-deb9
- tags:
- - aarch64-linux
-
-nightly-aarch64-linux-deb9:
- extends: validate-aarch64-linux-deb9
- stage: full-build
- artifacts:
- expire_in: 2 year
- variables:
- TEST_TYPE: slowtest
- only:
- variables:
- - $NIGHTLY
-
-validate-i386-linux-deb9:
- extends: .validate-linux
- stage: full-build
- image: ghcci/i386-linux-deb9:0.1
- allow_failure: true
- artifacts:
- when: always
- expire_in: 2 week
- cache:
- key: linux-i386-deb9
-
-nightly-i386-linux-deb9:
- extends: .validate-linux
- stage: full-build
- image: ghcci/i386-linux-deb9:0.1
- allow_failure: true
- variables:
- TEST_TYPE: slowtest
- artifacts:
- when: always
- expire_in: 2 week
- only:
- variables:
- - $NIGHTLY
- cache:
- key: linux-i386-deb9
-
-validate-x86_64-linux-deb9:
- extends: .validate-linux
- stage: build
- image: ghcci/x86_64-linux-deb9:0.2
- artifacts:
- when: always
- expire_in: 2 week
- cache:
- key: linux-x86_64-deb9
-
-nightly-x86_64-linux-deb9:
- extends: validate-x86_64-linux-deb9
- stage: build
- artifacts:
- expire_in: 2 year
- variables:
- TEST_TYPE: slowtest
- only:
- variables:
- - $NIGHTLY
-
-validate-x86_64-linux-deb9-llvm:
- extends: .validate-linux
- stage: full-build
- allow_failure: true
- image: ghcci/x86_64-linux-deb9:0.2
- variables:
- BUILD_FLAVOUR: perf-llvm
- cache:
- key: linux-x86_64-deb9
-
-validate-x86_64-linux-deb8:
- extends: .validate-linux
- stage: full-build
- image: ghcci/x86_64-linux-deb8:0.1
- cache:
- key: linux-x86_64-deb8
- artifacts:
- when: always
- expire_in: 2 week
-
-validate-x86_64-linux-fedora27:
- extends: .validate-linux
- stage: full-build
- image: ghcci/x86_64-linux-fedora27:0.1
- cache:
- key: linux-x86_64-fedora27
- artifacts:
- when: always
- expire_in: 2 week
-
-validate-x86_64-linux-deb9-integer-simple:
- extends: .validate-linux
- stage: full-build
- variables:
- INTEGER_LIBRARY: integer-simple
- image: ghcci/x86_64-linux-deb9:0.2
- cache:
- key: linux-x86_64-deb9
-
-nightly-x86_64-linux-deb9-integer-simple:
- extends: validate-x86_64-linux-deb9-integer-simple
- stage: full-build
- artifacts:
- expire_in: 2 year
- variables:
- TEST_TYPE: slowtest
- only:
- variables:
- - $NIGHTLY
-
-validate-x86_64-linux-deb9-unreg:
- extends: .validate-linux
- stage: full-build
- variables:
- CONFIGURE_ARGS: --enable-unregisterised
- image: ghcci/x86_64-linux-deb9:0.2
- cache:
- key: linux-x86_64-deb9
-
-############################################################
-# Validation via Pipelines (Windows)
-############################################################
-
-.validate-windows:
- before_script:
- - git clean -xdf
- - git submodule foreach git clean -xdf
-
- # Use a local temporary directory to ensure that concurrent builds don't
- # interfere with one another
+ echo 'HADDOCK_DOCS = NO' >> mk/build.mk
+ echo 'BUILD_SPHINX_HTML = NO' >> mk/build.mk
+ echo 'BUILD_SPHINX_PDF = NO' >> mk/build.mk
- |
- mkdir tmp
- set TMP=%cd%\tmp
- set TEMP=%cd%\tmp
-
- - set PATH=C:\msys64\usr\bin;%PATH%
- - python .gitlab/fix-submodules.py
- - git submodule sync --recursive
- - git submodule update --init --recursive
- - git checkout .gitmodules
- - bash .gitlab/win32-init.sh
- after_script:
- - rd /s /q tmp
- - robocopy /np /nfl /ndl /e "%APPDATA%\cabal" cabal-cache
- - bash -c 'make clean || true'
- cache:
- paths:
- - cabal-cache
- - ghc-8.6.2
- - ghc-tarballs
-
-validate-x86_64-windows-hadrian:
- extends: .validate-windows
- stage: full-build
- # due to #16073
- allow_failure: true
- variables:
- GHC_VERSION: "8.6.2"
- LANG: "en_US.UTF-8"
- script:
+ make V=0 -j$THREADS HADDOCK_DOCS=NO
+ # posix009 is broken in nonmoving_thr
- |
- set MSYSTEM=MINGW64
- python boot
- bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
- mkdir -p _build
- cp -R inplace/mingw _build/mingw
- # FIXME: --no-lint due to #15950
- - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick --no-lint"
- - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh binary-dist"
- - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
- cache:
- key: x86_64-windows
- tags:
- - x86_64-windows
-
-validate-x86_64-windows:
- extends: .validate-windows
- stage: full-build
- # due to #16084
- allow_failure: true
- variables:
- GHC_VERSION: "8.6.2"
- LANG: "en_US.UTF-8"
- script:
+ make slowtest \
+ WAY="nonmoving nonmoving_thr nonmoving_thr_ghc" \
+ THREADS=$THREADS \
+ SKIP_PERF_TESTS=YES \
+ SKIP_TESTS="posix009 hpc_raytrace"
- |
- set MSYSTEM=MINGW64
- python boot
- bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
- - bash -c "echo include mk/flavours/quick.mk > mk/build.mk"
- - bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
- - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
- cache:
- key: x86_64-windows
- tags:
- - x86_64-windows
-
-# Note [Cleanup on Windows]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# As noted in [1], gitlab-runner's shell executor doesn't clean up its working
-# directory after builds. Unfortunately, we are forced to use the shell executor
-# on Windows. To avoid running out of disk space we add a stage at the end of
-# the build to remove the \GitLabRunner\builds directory. Since we only run a
-# single build at a time on Windows this should be safe.
-#
-# [1] https://gitlab.com/gitlab-org/gitlab-runner/issues/3856
-
-# See Note [Cleanup on Windows]
-cleanup-windows:
- stage: cleanup
- tags:
- - x86_64-windows
- when: always
- before_script:
- - echo "Time to clean up"
- script:
- - echo "Let's go"
- after_script:
- - set "BUILD_DIR=%CI_PROJECT_DIR%"
- - set "BUILD_DIR=%BUILD_DIR:/=\%"
- - echo "Cleaning %BUILD_DIR%"
- - cd \GitLabRunner
- - rmdir /S /Q %BUILD_DIR%/*
- - exit /b 0
-
-############################################################
-# Validation via CircleCI
-############################################################
-
-.circleci:
- stage: build
- image: ghcci/x86_64-linux-deb8:0.1
- artifacts:
- when: always
- expire_in: 2 week
- reports:
- junit: junit.xml
- paths:
- - ghc.tar.xz
- - junit.xml
- tags:
- - circleci
-
-# All validation jobs keep the bindists and test results are artifacts,
-# when we get far enough to generate them.
-#
-# This requires updating the maximum artifacts size limit in Gitlab to
-# something like 200MB.
-
-.circleci-validate-x86_64-darwin:
- extends: .circleci
- stage: full-build
- allow_failure: true
- script: ".gitlab/circle-ci-job.sh validate-x86_64-darwin"
+ make V=0 HADDOCK_DOCS=YES EXTRA_HADDOCK_OPTS="+RTS -xn -RTS"