diff options
Diffstat (limited to '.circleci/config.yml')
-rw-r--r-- | .circleci/config.yml | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000..19780abbe9 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,317 @@ +# Questions about this file? +# See https://ghc.haskell.org/trac/ghc/wiki/ContinuousIntegration/Usage. + +version: 2 + +aliases: + - &defaults + working_directory: ~/ghc + - &prepare + run: + name: prepare-system + command: .circleci/prepare-system.sh + - &submodules + run: + name: submodules + command: .circleci/fetch-submodules.sh + - &buildenv + # 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 + run: + name: Boot + command: | + ./boot + + cat <<EOF >> mk/build.mk + BuildFlavour=$BUILD_FLAVOUR + ifneq "\$(BuildFlavour)" "" + include mk/flavours/\$(BuildFlavour).mk + endif + EOF + - &configure_unix + run: + name: Configure + command: ./configure + - &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 + command: ./configure --target=x86_64-unknown-freebsd10 + - &configure_unreg + run: + name: Configure + command: ./configure --enable-unregisterised + - &make + run: + name: Build + command: "make -j`mk/detect-cpu-count.sh` V=0" + - &build_hadrian + run: + name: Build GHC using Hadrian + command: | + cabal update + hadrian/build.sh -j`mk/detect-cpu-count.sh` + - &test + run: + name: 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 SKIP_PERF_TESTS=YES + - &bindist + run: + name: Create bindist + # 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" + - &storeartifacts + run: + name: Store artifacts + command: | + 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: ghcci/x86_64-linux:0.0.4 + environment: + <<: *buildenv + GHC_COLLECTOR_FLAVOR: x86_64-linux + steps: + - checkout + - *prepare + - *submodules + - *boot + - *configure_unix + - *make + - *bindist + - *storeartifacts + - *test + - *store_test_results + + "validate-x86_64-freebsd": + resource_class: xlarge + docker: + - image: ghcci/x86_64-freebsd + environment: + TARGET: FreeBSD + <<: *buildenv + GHC_COLLECTOR_FLAVOR: x86_64-freebsd + steps: + - checkout + - *prepare + - *submodules + - *boot + - *configure_bsd + - *make + - *bindist + - *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 + <<: *buildenv + steps: + - checkout + - *prepare + - *submodules + - *boot + - *configure_unix + - *make + - *bindist + - *storeartifacts + - *test + - *store_test_results + + "validate-hadrian-x86_64-linux": + resource_class: xlarge + docker: + - image: ghcci/x86_64-linux:0.0.4 + environment: + <<: *buildenv + steps: + - checkout + - *prepare + - *submodules + - *boot + - *configure_unix + - *build_hadrian + + "validate-x86_64-linux-unreg": + resource_class: xlarge + docker: + - image: ghcci/x86_64-linux:0.0.4 + environment: + <<: *buildenv + steps: + - checkout + - *prepare + - *submodules + - *boot + - *configure_unreg + - *make + - *test + - *store_test_results + + "validate-x86_64-linux-llvm": + resource_class: xlarge + docker: + - image: ghcci/x86_64-linux:0.0.4 + environment: + <<: *buildenv + BUILD_FLAVOUR: perf-llvm + steps: + - run: + name: Install LLVM + command: | + 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 + - 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 + - *boot + - *configure_unix + - *make + - *slowtest + +workflows: + version: 2 + validate: + jobs: + - validate-x86_64-linux: + *trigger_on_tags + # FreeBSD disabled: https://github.com/haskell/unix/issues/102 + # - validate-x86_64-freebsd + - 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: + - schedule: + cron: "0 0 * * *" + filters: + branches: + only: + - master + jobs: + - validate-x86_64-linux-unreg + - validate-x86_64-linux-llvm + - validate-x86_64-linux-debug + - slow-validate-x86_64-linux + +notify: + webhooks: + - url: https://phabricator.haskell.org/harbormaster/hook/circleci/ |