# 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: NO VERBOSE: 2 - &boot run: name: Boot command: | ./boot - &set_git_identity run: name: Set Git Identity command: | git config user.email "ghc-circleci@haskell.org" git config user.name "GHC CircleCI" - &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 METRICS_FILE=$(mktemp) echo "export METRICS_FILE=$METRICS_FILE" >> $BASH_ENV make test THREADS=`mk/detect-cpu-count.sh` SKIP_PERF_TESTS=$SKIP_PERF_TESTS TEST_ENV=$TEST_ENV JUNIT_FILE=../../test-results/junit.xml METRICS_FILE=$METRICS_FILE - &store_test_results store_test_results: path: test-results - &push_perf_note run: name: Push Performance Git Notes command: .circleci/push-test-metrics.sh - &store_test_artifacts store_artifacts: # we might want to add the whole output of the test phase # too at some point path: test-results/junit.xml - &slowtest run: name: Full Test 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 # Reduce compression effort to 3 command: make binary-dist TAR_COMP_OPTS="-2" && mv ghc*.tar.xz ghc.tar.xz # Building bindist takes ~15 minutes without output, account for # that. no_output_timeout: "30m" - &store_bindist store_artifacts: path: ghc.tar.xz - &only_release_tags tags: only: /^ghc-.*/ - &ignore_gitlab_branches branches: ignore: /^gitlab\/.*/ jobs: "validate-x86_64-freebsd": docker: - image: ghcci/x86_64-freebsd environment: TARGET: FreeBSD <<: *buildenv GHC_COLLECTOR_FLAVOR: x86_64-freebsd TEST_ENV: x86_64-freebsd steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_bsd - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "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 TEST_ENV: x86_64-darwin steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-x86_64-linux-deb8": docker: - image: ghcci/x86_64-linux-deb8:0.1 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: x86_64-linux TEST_ENV: x86_64-linux-deb8 steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-x86_64-linux-deb9-integer-simple": docker: - image: ghcci/x86_64-linux-deb9:0.2 environment: <<: *buildenv INTEGER_LIBRARY: integer-simple GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9 steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-x86_64-linux-deb9": docker: - image: ghcci/x86_64-linux-deb9:0.1 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9 TEST_ENV: x86_64-linux-deb9 steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-hadrian-x86_64-linux-deb8": docker: - image: ghcci/x86_64-linux-deb8:0.1 environment: <<: *buildenv steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *build_hadrian "validate-x86_64-linux-deb8-unreg": docker: - image: ghcci/x86_64-linux-deb8:0.1 environment: <<: *buildenv TEST_ENV: x86_64-linux-deb8-unreg steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unreg - *make - *test - *store_test_results - *push_perf_note - *store_test_artifacts "validate-x86_64-linux-deb9-llvm": docker: - image: ghcci/x86_64-linux-deb9:0.2 environment: <<: *buildenv BUILD_FLAVOUR: perf-llvm TEST_ENV: x86_64-linux-deb9-llvm steps: - run: name: Verify that llc works command: llc - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *test - *store_test_results - *store_test_artifacts - *push_perf_note # Nightly build with -DDEBUG using devel2 flavour "validate-x86_64-linux-deb8-debug": docker: - image: ghcci/x86_64-linux-deb8:0.1 environment: BUILD_FLAVOUR: devel2 <<: *buildenv TEST_ENV: x86_64-linux-deb8-debug SKIP_PERF_TESTS: YES steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-i386-linux-deb9": docker: - image: ghcci/i386-linux-deb9:0.2 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: i386-linux-deb9 TEST_ENV: i386-linux-deb9 steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix_32 - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-i386-linux-deb8": docker: - image: ghcci/i386-linux-deb8:0.1 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: i386-linux TEST_ENV: i386-linux-deb8 steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix_32 - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-x86_64-linux-centos7": docker: - image: ghcci/x86_64-linux-centos7:0.1 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: x86_64-centos7 LANG: en_US.UTF-8 TEST_ENV: x86_64-centos7 # Sphinx is too old BUILD_SPHINX_PDF: NO steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "validate-x86_64-linux-fedora27": docker: - image: ghcci/x86_64-linux-fedora27:0.1 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: x86_64-fedora TEST_ENV: x86_64-linux-fedora27 steps: - checkout - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - *bindist - *store_bindist - *test - *store_test_results - *store_test_artifacts - *push_perf_note "slow-validate-x86_64-linux-deb8": docker: - image: ghcci/x86_64-linux-deb8:0.1 environment: <<: *buildenv GHC_COLLECTOR_FLAVOR: x86_64-linux-deb8 steps: - checkout - *prepare - *submodules - *boot - *configure_unix - *make - *slowtest - *store_test_results - *store_test_artifacts - *push_perf_note workflows: version: 2 validate: jobs: - validate-x86_64-linux-deb8: filters: <<: [*only_release_tags, *ignore_gitlab_branches] # FreeBSD disabled: https://github.com/haskell/unix/issues/102 # - validate-x86_64-freebsd - validate-x86_64-darwin: filters: <<: [*only_release_tags, *ignore_gitlab_branches] - validate-x86_64-linux-deb8-llvm: filters: <<: *ignore_gitlab_branches - validate-i386-linux-deb8: filters: <<: [*only_release_tags, *ignore_gitlab_branches] - validate-x86_64-linux-deb9: filters: <<: [*only_release_tags, *ignore_gitlab_branches] - validate-i386-linux-deb9: filters: <<: [*only_release_tags, *ignore_gitlab_branches] - validate-x86_64-linux-centos7: filters: <<: [*only_release_tags, *ignore_gitlab_branches] - validate-hadrian-x86_64-linux-deb8: filters: <<: *ignore_gitlab_branches - validate-x86_64-linux-fedora27: filters: <<: [*only_release_tags, *ignore_gitlab_branches] nightly: triggers: - schedule: cron: "0 0 * * *" filters: branches: only: - master jobs: - validate-x86_64-linux-deb8-unreg - validate-x86_64-linux-deb8-llvm - validate-x86_64-linux-deb8-debug - validate-x86_64-linux-deb9 - validate-x86_64-linux-deb9-integer-simple - slow-validate-x86_64-linux-deb8 notify: webhooks: - url: https://phabricator.haskell.org/harbormaster/hook/circleci/