diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-02-12 22:44:42 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2019-02-22 11:26:41 -0500 |
commit | 1ecd298fe48e52d56b925eddf69694462dd42e90 (patch) | |
tree | fe77e0235358b8e6aa40e013ceb3c4cb234e2574 | |
parent | b0d6948036c19eeeeed8d0cbd7dbf7e6cdcd2fa1 (diff) | |
download | haskell-1ecd298fe48e52d56b925eddf69694462dd42e90.tar.gz |
gitlab-ci: Well-Typed CI
-rw-r--r-- | .gitlab-ci.yml | 437 |
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" |