config.yml 3.48 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 31 32 33 34 35 36 37 38 39
    SKIP_PERF_TESTS: YES
    VERBOSE: 2
  - &boot
    run:
      name: Boot
      command: ./boot
  - &configure_unix
    run:
      name: Configure
      command: ./configure
  - &configure_bsd
    run:
      name: Configure
      command: ./configure --target=x86_64-unknown-freebsd10
40 41 42 43
  - &configure_unreg
    run:
      name: Configure
      command: ./configure --enable-unregisterised
44
  - &make
45
    run:
46 47 48 49 50 51 52 53 54 55
      name: Build
      command: "make -j$THREADS"
  - &test
    run:
      name: Test
      command: make test
  - &bindist
    run:
      name: Create bindist
      command: make binary-dist
56 57 58 59 60
      # Building bindist takes ~15 minutes without output, account for
      # that.
      no_output_timeout: "30m"
  - &collectartifacts
    run:
61
      name: Collect artifacts
62 63 64 65 66 67 68
      # 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
69 70 71
  - &storeartifacts
    store-artifacts:
      path: /tmp/artifacts
72 73 74 75

jobs:
  "validate-x86_64-linux":
    resource_class: xlarge
Mathieu Boespflug's avatar
Mathieu Boespflug committed
76
    docker:
77
      - image: haskell:8.2
78 79
    environment:
      <<: *buildenv
80
    steps:
81
      - *precheckout
82 83 84
      - checkout
      - *prepare
      - *submodules
85 86 87 88 89
      - *boot
      - *configure_unix
      - *make
      - *test
      - *bindist
90
      - *collectartifacts
91
      - *storeartifacts
92 93

  "validate-x86_64-freebsd":
Mathieu Boespflug's avatar
Mathieu Boespflug committed
94
    resource_class: xlarge
95 96 97 98
    docker:
      - image: tweag/toolchain-x86_64-freebsd
    environment:
      TARGET: FreeBSD
99
      <<: *buildenv
100
    steps:
101
      - *precheckout
102 103 104
      - checkout
      - *prepare
      - *submodules
105 106 107 108 109 110 111
      - *boot
      - *configure_bsd
      - *make
      - *test
      - *bindist
      - *collectartifacts
      - *storeartifacts
112 113 114 115

  "validate-x86_64-darwin":
    macos:
      xcode: "9.0"
116 117
    environment:
      <<: *buildenv
Mathieu Boespflug's avatar
Mathieu Boespflug committed
118
    steps:
119 120 121
      - checkout
      - *prepare
      - *submodules
122 123 124 125 126
      - *boot
      - *configure_unix
      - *make
      - *test
      - *bindist
127 128 129
      # Disabled due to CircleCI brokenness
      #- *collectartifacts
      #- *storeartifacts
130

131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
  "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

147 148 149 150 151 152 153 154
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
155

156 157 158 159 160 161 162 163 164 165 166
  nightly:
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
    - validate-x86_64-linux-unreg

167 168 169
notify:
  webhooks:
    - url: https://phabricator.haskell.org/harbormaster/hook/circleci/