diff options
Diffstat (limited to '.circleci/config.yml')
-rw-r--r-- | .circleci/config.yml | 324 |
1 files changed, 235 insertions, 89 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index 6dcb218770..31b64a1c22 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,21 +15,22 @@ aliases: name: submodules command: .circleci/fetch-submodules.sh - &buildenv - THREADS: 9 - SKIP_PERF_TESTS: YES + # 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 - - cat <<EOF >> mk/build.mk - BuildFlavour=$BUILD_FLAVOUR - ifneq "\$(BuildFlavour)" "" - include mk/flavours/\$(BuildFlavour).mk - endif - EOF + - &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 @@ -50,131 +51,197 @@ aliases: - &make run: name: Build - command: "make -j$THREADS V=0" + 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$THREADS + hadrian/build.sh -j`mk/detect-cpu-count.sh` - &test run: name: Test command: | mkdir -p test-results - make test SKIP_PERF_TESTS=YES JUNIT_FILE=../../test-results/junit.xml + 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: make slowtest SKIP_PERF_TESTS=YES + 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" + 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" - - &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-.*/ + - &store_bindist + store_artifacts: + path: ghc.tar.xz + - &only_release_tags + tags: + only: /^ghc-.*/ + - &ignore_gitlab_branches + branches: + ignore: /^gitlab\/.*/ jobs: - "validate-x86_64-linux": - resource_class: xlarge + "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:0.0.4 + - 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 - - *storeartifacts + - *store_bindist - *test - *store_test_results + - *store_test_artifacts + - *push_perf_note - "validate-x86_64-freebsd": - resource_class: xlarge + "validate-x86_64-linux-deb9-integer-simple": docker: - - image: ghcci/x86_64-freebsd + - image: ghcci/x86_64-linux-deb9:0.2 environment: - TARGET: FreeBSD <<: *buildenv - GHC_COLLECTOR_FLAVOR: x86_64-freebsd + INTEGER_LIBRARY: integer-simple + GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9 steps: - checkout + - *set_git_identity - *prepare - *submodules - *boot - - *configure_bsd + - *configure_unix - *make - *bindist - - *storeartifacts + - *store_bindist - *test - *store_test_results + - *store_test_artifacts + - *push_perf_note - "validate-x86_64-darwin": - macos: - xcode: "9.0" + "validate-x86_64-linux-deb9": + docker: + - image: ghcci/x86_64-linux-deb9:0.1 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 + 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 - - *storeartifacts + - *store_bindist - *test - *store_test_results + - *store_test_artifacts + - *push_perf_note - "validate-hadrian-x86_64-linux": - resource_class: xlarge + "validate-hadrian-x86_64-linux-deb8": docker: - - image: ghcci/x86_64-linux:0.0.4 + - 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-unreg": - resource_class: xlarge + "validate-x86_64-linux-deb8-unreg": docker: - - image: ghcci/x86_64-linux:0.0.4 + - 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 @@ -182,41 +249,44 @@ jobs: - *make - *test - *store_test_results + - *push_perf_note + - *store_test_artifacts - "validate-x86_64-linux-llvm": - resource_class: xlarge + "validate-x86_64-linux-deb9-llvm": docker: - - image: ghcci/x86_64-linux:0.0.4 + - image: ghcci/x86_64-linux-deb9:0.2 environment: <<: *buildenv BUILD_FLAVOUR: perf-llvm + TEST_ENV: x86_64-linux-deb9-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 + - *set_git_identity - *prepare - *submodules - *boot - *configure_unix - *make - - *slowtest + - *test + - *store_test_results + - *store_test_artifacts + - *push_perf_note # Nightly build with -DDEBUG using devel2 flavour - "validate-x86_64-linux-debug": - resource_class: xlarge + "validate-x86_64-linux-deb8-debug": docker: - - image: ghcci/x86_64-linux:0.0.4 + - 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 @@ -224,52 +294,106 @@ jobs: - *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": - resource_class: xlarge + "validate-i386-linux-deb8": docker: - - image: ghcci/i386-linux:0.0.5 + - 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 - - *storeartifacts + - *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-fedora": - resource_class: xlarge + "validate-x86_64-linux-fedora27": docker: - - image: ghcci/x86_64-linux-fedora:0.0.15 + - 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 - - *storeartifacts + - *store_bindist - *test - *store_test_results + - *store_test_artifacts + - *push_perf_note - "slow-validate-x86_64-linux": - resource_class: xlarge + "slow-validate-x86_64-linux-deb8": docker: - - image: ghcci/x86_64-linux:0.0.4 + - image: ghcci/x86_64-linux-deb8:0.1 environment: <<: *buildenv - GHC_COLLECTOR_FLAVOR: x86_64-linux + GHC_COLLECTOR_FLAVOR: x86_64-linux-deb8 steps: - checkout - *prepare @@ -278,23 +402,43 @@ jobs: - *configure_unix - *make - *slowtest + - *store_test_results + - *store_test_artifacts + - *push_perf_note workflows: version: 2 validate: jobs: - - validate-x86_64-linux: - *trigger_on_tags + - 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: - *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 + 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: @@ -305,10 +449,12 @@ workflows: only: - master jobs: - - validate-x86_64-linux-unreg - - validate-x86_64-linux-llvm - - validate-x86_64-linux-debug - - slow-validate-x86_64-linux + - 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: |