config.yml 4.63 KB
Newer Older
Mathieu Boespflug's avatar
Mathieu Boespflug committed
1
version: 2
2 3 4

aliases:
  - &defaults
Mathieu Boespflug's avatar
Mathieu Boespflug committed
5
    working_directory: ~/ghc
6 7 8 9 10 11 12 13 14 15

  # 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
16 17 18 19 20 21 22 23
  - &prepare
    run:
      name: prepare-system
      command: .circleci/prepare-system.sh
  - &submodules
    run:
      name: submodules
      command: .circleci/fetch-submodules.sh
24
  - &buildenv
Ben Gamari's avatar
Ben Gamari committed
25
    THREADS: 3
26 27 28 29 30
    SKIP_PERF_TESTS: YES
    VERBOSE: 2
  - &boot
    run:
      name: Boot
31 32 33 34 35 36 37 38 39
      command: |
        ./boot

        cat <<EOF >> mk/build.mk
        BuildFlavour=$BUILD_FLAVOUR
        ifneq "\$(BuildFlavour)" ""
        include mk/flavours/\$(BuildFlavour).mk
        endif
        EOF
40 41 42 43 44 45 46 47
  - &configure_unix
    run:
      name: Configure
      command: ./configure
  - &configure_bsd
    run:
      name: Configure
      command: ./configure --target=x86_64-unknown-freebsd10
48 49 50 51
  - &configure_unreg
    run:
      name: Configure
      command: ./configure --enable-unregisterised
52
  - &make
53
    run:
54 55 56 57 58 59
      name: Build
      command: "make -j$THREADS"
  - &test
    run:
      name: Test
      command: make test
60 61 62 63
  - &slowtest
    run:
      name: Full Test
      command: make slowtest
64 65 66 67
  - &bindist
    run:
      name: Create bindist
      command: make binary-dist
68 69 70 71 72
      # Building bindist takes ~15 minutes without output, account for
      # that.
      no_output_timeout: "30m"
  - &collectartifacts
    run:
73
      name: Collect artifacts
74 75 76 77 78 79 80
      # We need this because CircleCI expects a path without
      # wildcards but bindist archive name is not static
      command: |
        mkdir -p /tmp/artifacts
        pwd
        find .
        cp ghc*.tar.xz /tmp/artifacts
81 82 83
  - &storeartifacts
    store-artifacts:
      path: /tmp/artifacts
84 85 86 87

jobs:
  "validate-x86_64-linux":
    resource_class: xlarge
Mathieu Boespflug's avatar
Mathieu Boespflug committed
88
    docker:
89
      - image: haskell:8.2
90 91
    environment:
      <<: *buildenv
92
    steps:
93
      - *precheckout
94 95 96
      - checkout
      - *prepare
      - *submodules
97 98 99 100 101
      - *boot
      - *configure_unix
      - *make
      - *test
      - *bindist
102
      - *collectartifacts
103
      - *storeartifacts
104 105

  "validate-x86_64-freebsd":
Mathieu Boespflug's avatar
Mathieu Boespflug committed
106
    resource_class: xlarge
107 108 109 110
    docker:
      - image: tweag/toolchain-x86_64-freebsd
    environment:
      TARGET: FreeBSD
111
      <<: *buildenv
112
    steps:
113
      - *precheckout
114 115 116
      - checkout
      - *prepare
      - *submodules
117 118 119 120 121 122 123
      - *boot
      - *configure_bsd
      - *make
      - *test
      - *bindist
      - *collectartifacts
      - *storeartifacts
124 125 126 127

  "validate-x86_64-darwin":
    macos:
      xcode: "9.0"
128 129
    environment:
      <<: *buildenv
Mathieu Boespflug's avatar
Mathieu Boespflug committed
130
    steps:
131 132 133
      - checkout
      - *prepare
      - *submodules
134 135 136 137 138
      - *boot
      - *configure_unix
      - *make
      - *test
      - *bindist
139 140 141
      # Disabled due to CircleCI brokenness
      #- *collectartifacts
      #- *storeartifacts
142

143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
  "validate-x86_64-linux-unreg":
    resource_class: xlarge
    docker:
      - image: haskell:8.2
    environment:
      <<: *buildenv
    steps:
      - *precheckout
      - checkout
      - *prepare
      - *submodules
      - *boot
      - *configure_unreg
      - *make
      - *test

159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
  "validate-x86_64-linux-llvm":
    resource_class: xlarge
    docker:
      - image: haskell:8.2
    environment:
      <<: *buildenv
      BUILD_FLAVOUR: perf-llvm
    steps:
      - 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
      - run:
          name: Verify that llc works
          command: llc
      - *precheckout
      - checkout
      - *prepare
      - *submodules
      - *boot
      - *configure_unix
      - *make
      - *slowtest

187 188 189 190 191 192 193 194
workflows:
  version: 2
  validate:
    jobs:
    - validate-x86_64-linux
    # FreeBSD disabled: https://github.com/haskell/unix/issues/102
    # - validate-x86_64-freebsd
    - validate-x86_64-darwin
195
    - validate-x86_64-linux-llvm
196

197 198 199 200 201 202 203 204 205 206
  nightly:
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
    - validate-x86_64-linux-unreg
207
    - validate-x86_64-linux-llvm
208

209 210 211
notify:
  webhooks:
    - url: https://phabricator.haskell.org/harbormaster/hook/circleci/