Revert "CircleCI: Build DWARF-enabled Linux bindists"
[ghc.git] / .circleci / config.yml
index 620ac35..f356901 100644 (file)
@@ -1,18 +1,11 @@
+# Questions about this file?
+# See https://ghc.haskell.org/trac/ghc/wiki/ContinuousIntegration/Usage.
+
 version: 2
 
 aliases:
   - &defaults
     working_directory: ~/ghc
-
-  # Make sure we have proper openssh before checkout: CircleCI git
-  # does not check the repository out properly without it and also
-  # takes 20 times longer than it should be.
-  - &precheckout
-    run:
-      name: Install OpenSSH client
-      command: |
-        apt-get update -qq
-        apt-get install -qy openssh-client
   - &prepare
     run:
       name: prepare-system
@@ -22,7 +15,9 @@ aliases:
       name: submodules
       command: .circleci/fetch-submodules.sh
   - &buildenv
-    THREADS: 3
+    # ideally we would simply set THREADS here instead of re-detecting it every
+    # time we need it below. Unfortunately, there is no way to set an environment
+    # variable with the result of a shell script.
     SKIP_PERF_TESTS: YES
     VERBOSE: 2
   - &boot
@@ -40,7 +35,12 @@ aliases:
   - &configure_unix
     run:
       name: Configure
-      command: ./configure
+      command: ./configure $CONFIGURE_OPTS
+  - &configure_unix_32
+    run:
+      name: Configure
+      command: |
+        setarch i386 ./configure --with-ghc=/opt/ghc-i386/8.4.2/bin/ghc
   - &configure_bsd
     run:
       name: Configure
@@ -52,92 +52,100 @@ aliases:
   - &make
     run:
       name: Build
-      command: "make -j$THREADS"
+      command: "make -j`mk/detect-cpu-count.sh` V=0"
   - &build_hadrian
     run:
-      name: Build Hadrian
-      command: |
-        cd hadrian
-        cabal update
-        cabal install
-  - &build_ghc_hadrian
-    run:
       name: Build GHC using Hadrian
       command: |
-        $HOME/.cabal/bin/hadrian -j$THREADS
+        cabal update
+        hadrian/build.sh -j`mk/detect-cpu-count.sh`
   - &test
     run:
       name: Test
-      command: make test
+      command: |
+        mkdir -p test-results
+        make test THREADS=`mk/detect-cpu-count.sh` SKIP_PERF_TESTS=YES JUNIT_FILE=../../test-results/junit.xml
+  - &store_test_results
+    store_test_results:
+      path: test-results
   - &slowtest
     run:
       name: Full Test
-      command: make slowtest
+      command: |
+        mkdir -p test-results
+        make slowtest SKIP_PERF_TESTS=YES THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../test-results/junit.xml
   - &bindist
     run:
       name: Create bindist
-      command: make binary-dist
+      # Reduce compression effort to 3
+      command: make binary-dist TAR_COMP_OPTS="-2"
       # Building bindist takes ~15 minutes without output, account for
       # that.
       no_output_timeout: "30m"
-  - &collectartifacts
+  - &storeartifacts
     run:
-      name: Collect artifacts
-      # We need this because CircleCI expects a path without
-      # wildcards but bindist archive name is not static
+      name: Store artifacts
       command: |
-        mkdir -p /tmp/artifacts
-        pwd
-        find .
-        cp ghc*.tar.xz /tmp/artifacts
-  - &storeartifacts
-    store-artifacts:
-      path: /tmp/artifacts
+        curl https://ghc-artifacts.s3.amazonaws.com/tools/ghc-artifact-collector-$GHC_COLLECTOR_FLAVOR --output ghc-artifact-collector
+        chmod +x ghc-artifact-collector
+        ./ghc-artifact-collector ghc*.tar.xz
+  - &trigger_on_tags
+    filters:
+      tags:
+        only: /^ghc-.*/
 
 jobs:
   "validate-x86_64-linux":
     resource_class: xlarge
     docker:
-      - image: haskell:8.2
+      - image: ghcci/x86_64-linux:0.0.4
     environment:
       <<: *buildenv
+      GHC_COLLECTOR_FLAVOR: x86_64-linux
     steps:
-      - *precheckout
       - checkout
       - *prepare
       - *submodules
       - *boot
       - *configure_unix
       - *make
-      - *test
       - *bindist
-      - *collectartifacts
       - *storeartifacts
+      - *test
+      - *store_test_results
 
   "validate-x86_64-freebsd":
     resource_class: xlarge
     docker:
-      - image: tweag/toolchain-x86_64-freebsd
+      - image: ghcci/x86_64-freebsd
     environment:
       TARGET: FreeBSD
       <<: *buildenv
+      GHC_COLLECTOR_FLAVOR: x86_64-freebsd
     steps:
-      - *precheckout
       - checkout
       - *prepare
       - *submodules
       - *boot
       - *configure_bsd
       - *make
-      - *test
       - *bindist
-      - *collectartifacts
       - *storeartifacts
+      - *test
+      - *store_test_results
 
   "validate-x86_64-darwin":
     macos:
       xcode: "9.0"
     environment:
+      # Disable sphinx PDF output as MacTeX apparently doesn't provide xelatex
+      BUILD_SPHINX_PDF: "NO"
+      MACOSX_DEPLOYMENT_TARGET: "10.7"
+      # Only Sierra and onwards supports clock_gettime. See #12858
+      ac_cv_func_clock_gettime: "no"
+      GHC_COLLECTOR_FLAVOR: x86_64-darwin
+      # Build with in-tree GMP since this isn't available on OS X by default.
+      CONFIGURE_OPTS: --with-intree-gmp
       <<: *buildenv
     steps:
       - checkout
@@ -146,35 +154,32 @@ jobs:
       - *boot
       - *configure_unix
       - *make
-      - *test
       - *bindist
-      - *collectartifacts
       - *storeartifacts
+      - *test
+      - *store_test_results
 
   "validate-hadrian-x86_64-linux":
     resource_class: xlarge
     docker:
-      - image: haskell:8.2
+      - image: ghcci/x86_64-linux:0.0.4
     environment:
       <<: *buildenv
     steps:
-      - *precheckout
       - checkout
       - *prepare
       - *submodules
       - *boot
       - *configure_unix
       - *build_hadrian
-      - *build_ghc_hadrian
 
   "validate-x86_64-linux-unreg":
     resource_class: xlarge
     docker:
-      - image: haskell:8.2
+      - image: ghcci/x86_64-linux:0.0.4
     environment:
       <<: *buildenv
     steps:
-      - *precheckout
       - checkout
       - *prepare
       - *submodules
@@ -182,11 +187,12 @@ jobs:
       - *configure_unreg
       - *make
       - *test
+      - *store_test_results
 
   "validate-x86_64-linux-llvm":
     resource_class: xlarge
     docker:
-      - image: haskell:8.2
+      - image: ghcci/x86_64-linux:0.0.4
     environment:
       <<: *buildenv
       BUILD_FLAVOUR: perf-llvm
@@ -194,15 +200,83 @@ jobs:
       - run:
           name: Install LLVM
           command: |
-            apt-get update
-            apt-get install -y curl xz-utils
-            curl http://releases.llvm.org/5.0.0/clang+llvm-5.0.0-x86_64-linux-gnu-debian8.tar.xz | tar -xJC ..
-            # See https://discuss.circleci.com/t/how-to-add-a-path-to-path-in-circle-2-0/11554/3
-            echo "export PATH=`pwd`/../clang+llvm-5.0.0-x86_64-linux-gnu-debian8/bin:\$PATH" >> $BASH_ENV
+            curl http://releases.llvm.org/6.0.0/clang+llvm-6.0.0-x86_64-linux-gnu-debian8.tar.xz | tar -xJC ..
+            echo "export PATH=`pwd`/../clang+llvm-6.0.0-x86_64-linux-gnu-debian8/bin:\$PATH" >> $BASH_ENV
       - run:
           name: Verify that llc works
           command: llc
-      - *precheckout
+      - checkout
+      - *prepare
+      - *submodules
+      - *boot
+      - *configure_unix
+      - *make
+      - *test
+
+  # Nightly build with -DDEBUG using devel2 flavour
+  "validate-x86_64-linux-debug":
+    resource_class: xlarge
+    docker:
+      - image: ghcci/x86_64-linux:0.0.4
+    environment:
+      BUILD_FLAVOUR: devel2
+      <<: *buildenv
+    steps:
+      - checkout
+      - *prepare
+      - *submodules
+      - *boot
+      - *configure_unix
+      - *make
+      - *test
+      - *store_test_results
+
+  "validate-i386-linux":
+    resource_class: xlarge
+    docker:
+      - image: ghcci/i386-linux:0.0.5
+    environment:
+      <<: *buildenv
+      GHC_COLLECTOR_FLAVOR: i386-linux
+    steps:
+      - checkout
+      - *prepare
+      - *submodules
+      - *boot
+      - *configure_unix_32
+      - *make
+      - *bindist
+      - *storeartifacts
+      - *test
+      - *store_test_results
+
+  "validate-x86_64-fedora":
+    resource_class: xlarge
+    docker:
+      - image: ghcci/x86_64-linux-fedora:0.0.15
+    environment:
+      <<: *buildenv
+      GHC_COLLECTOR_FLAVOR: x86_64-fedora
+    steps:
+      - checkout
+      - *prepare
+      - *submodules
+      - *boot
+      - *configure_unix
+      - *make
+      - *bindist
+      - *storeartifacts
+      - *test
+      - *store_test_results
+
+  "slow-validate-x86_64-linux":
+    resource_class: xlarge
+    docker:
+      - image: ghcci/x86_64-linux:0.0.4
+    environment:
+      <<: *buildenv
+      GHC_COLLECTOR_FLAVOR: x86_64-linux
+    steps:
       - checkout
       - *prepare
       - *submodules
@@ -210,17 +284,24 @@ jobs:
       - *configure_unix
       - *make
       - *slowtest
+      - *store_test_results
 
 workflows:
   version: 2
   validate:
     jobs:
-    - validate-x86_64-linux
+    - validate-x86_64-linux:
+        *trigger_on_tags
     # FreeBSD disabled: https://github.com/haskell/unix/issues/102
     # - validate-x86_64-freebsd
-    - validate-x86_64-darwin
+    - validate-x86_64-darwin:
+        *trigger_on_tags
     - validate-x86_64-linux-llvm
+    - validate-i386-linux:
+        *trigger_on_tags
     - validate-hadrian-x86_64-linux
+    - validate-x86_64-fedora:
+        *trigger_on_tags
 
   nightly:
     triggers:
@@ -233,6 +314,8 @@ workflows:
     jobs:
     - validate-x86_64-linux-unreg
     - validate-x86_64-linux-llvm
+    - validate-x86_64-linux-debug
+    - slow-validate-x86_64-linux
 
 notify:
   webhooks: