gitlab-ci/deb8-hadrian: Fix submodule paths
[ghc.git] / .gitlab-ci.yml
index ee8ffae..e9c51a2 100644 (file)
@@ -2,33 +2,61 @@ variables:
   GIT_SSL_NO_VERIFY: "1"
 
 before_script:
-  - python .gitlab/fix-submodules.py
+  - python3 .gitlab/fix-submodules.py
   - git submodule sync --recursive
   - git submodule update --init --recursive
   - git checkout .gitmodules
 
+stages:
+  - lint
+  - build
+
+############################################################
+# 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
+
 ############################################################
 # Validation via Pipelines (hadrian)
 ############################################################
 
 .validate-hadrian:
+  stage: build
+  allow_failure: true
   script:
     - bash .circleci/prepare-system.sh
     - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
     - ./boot
-    - ./configure
+    - ./configure $CONFIGURE_ARGS
     - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh`
   cache:
     key: hadrian
     paths:
       - cabal-cache
-  image: ghcci/x86_64-linux-deb8:0.1
 
-.validate-x86_64-linux-hadrian:
+validate-x86_64-linux-deb8-hadrian:
   extends: .validate-hadrian
+  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
 
@@ -37,10 +65,13 @@ before_script:
 ############################################################
 
 .validate:
+  stage: build
+  variables:
+    TEST_TYPE: test
   script:
     - make clean || true
     - ./boot
-    - ./configure
+    - ./configure $CONFIGURE_ARGS
     - |
       THREADS=`mk/detect-cpu-count.sh`
       make V=0 -j$THREADS
@@ -49,22 +80,22 @@ before_script:
       mv ghc-*.tar.xz ghc.tar.xz
     - |
       THREADS=`mk/detect-cpu-count.sh`
-      make test THREADS=$THREADS JUNIT_FILE=../../junit.xml
-  image: ghcci/x86_64-linux-deb8:0.1
+      make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml
   artifacts:
-    when: always
     reports:
       junit: junit.xml
+    expire_in: 2 week
     paths:
       - ghc.tar.xz
       - junit.xml
 
-.validate-x86_64-darwin:
+validate-x86_64-darwin:
   extends: .validate
+  allow_failure: true
   tags:
     - x86_64-darwin
   variables:
-    GHC_VERSION: 8.6.2
+    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"
@@ -80,18 +111,21 @@ before_script:
     - echo "BUILD_SPHINX_PDF=NO" >> 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-x86_64-linux:
+.validate-linux:
   extends: .validate
   tags:
     - x86_64-linux
   before_script:
-    - python .gitlab/fix-submodules.py
+    - python3 .gitlab/fix-submodules.py
     - git submodule sync --recursive
     - git submodule update --init --recursive
     - git checkout .gitmodules
@@ -102,16 +136,112 @@ validate-x86_64-linux:
   after_script:
     - cp -Rf $HOME/.cabal cabal-cache
   cache:
-    key: darwin
+    key: linux
     paths:
       - cabal-cache
       - toolchain
 
+validate-aarch64-linux-deb9:
+  extends: .validate-linux
+  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
+  artifacts:
+    expire_in: 2 year
+  variables:
+    TEST_TYPE: slowtest
+  only:
+    variables:
+      - $NIGHTLY
+
+validate-x86_64-linux-deb9:
+  extends: .validate-linux
+  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
+  artifacts:
+    expire_in: 2 year
+  variables:
+    TEST_TYPE: slowtest
+  only:
+    variables:
+      - $NIGHTLY
+
+validate-x86_64-linux-deb9-llvm:
+  extends: .validate-linux
+  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
+  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
+  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
+  allow_failure: true
+  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
+  artifacts:
+    expire_in: 2 year
+  variables:
+    TEST_TYPE: slowtest
+  only:
+    variables:
+      - $NIGHTLY
+
+validate-x86_64-linux-deb9-unreg:
+  extends: .validate-linux
+  variables:
+    CONFIGURE_ARGS: --enable-unregisterised
+  image: ghcci/x86_64-linux-deb9:0.2
+  cache:
+    key: linux-x86_64-deb9
+
 ############################################################
-# Validation via Pipelines (make, Windows)
+# Validation via Pipelines (Windows)
 ############################################################
 
-.validate-x86_64-windows:
+validate-x86_64-windows-hadrian:
+  stage: build
   variables:
     GHC_VERSION: "8.6.2"
   script:
@@ -122,13 +252,14 @@ validate-x86_64-linux:
       bash -c './configure --with-ghc=`pwd`/toolchain/bin/ghc --enable-tarballs-autodownload HappyCmd=`pwd`/toolchain/bin/happy AlexCmd=`pwd`/toolchain/bin/alex'
       mkdir -p _build
       cp -R inplace/mingw _build/mingw
-    - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick"
+    # 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"
     - mv ghc-*.tar.xz ghc.tar.xz
     - bash -c 'make V=0 -j`mk/detect-cpu-count.sh` HADDOCK_DOCS=NO test THREADS=$THREADS JUNIT_FILE=../../junit.xml'
     - cp -Rf $APPDATA/cabal cabal-cache
   cache:
-    key: windows
+    key: windows-hadrian
     paths:
       - cabal-cache
       - ghc-8.6.2
@@ -136,15 +267,39 @@ validate-x86_64-linux:
   tags:
     - x86_64-windows
 
+validate-x86_64-windows:
+  stage: build
+  variables:
+    GHC_VERSION: "8.6.2"
+  script:
+    - bash -e .gitlab/win32-init.sh
+    - |
+      set MSYSTEM=MINGW64
+      python boot
+      bash -c './configure --with-ghc=`pwd`/toolchain/bin/ghc --enable-tarballs-autodownload HappyCmd=`pwd`/toolchain/bin/happy AlexCmd=`pwd`/toolchain/bin/alex'
+    - bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
+    - mv ghc-*.tar.xz ghc.tar.xz
+    - bash -c 'make V=0 -j`mk/detect-cpu-count.sh` HADDOCK_DOCS=NO test THREADS=$THREADS JUNIT_FILE=../../junit.xml'
+    - cp -Rf $APPDATA/cabal cabal-cache
+  cache:
+    key: windows
+    paths:
+      - cabal-cache
+      - ghc-8.6.2
+      - ghc-tarballs
+  tags:
+    - x86_64-windows
 
 ############################################################
 # 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:
@@ -159,13 +314,13 @@ validate-x86_64-linux:
 # This requires updating the maximum artifacts size limit in Gitlab to
 # something like 200MB.
 
-circleci-validate-x86_64-linux:
+circleci-validate-x86_64-linux-deb8:
   extends: .circleci
-  script: ".gitlab/circle-ci-job.sh validate-x86_64-linux"
+  script: ".gitlab/circle-ci-job.sh validate-x86_64-linux-deb8"
 
-circleci-validate-i386-linux:
+circleci-validate-i386-linux-deb8:
   extends: .circleci
-  script: ".gitlab/circle-ci-job.sh validate-i386-linux"
+  script: ".gitlab/circle-ci-job.sh validate-i386-linux-deb8"
 
 # circleci-validate-x86_64-freebsd:
 #   extends: .circleci