summaryrefslogtreecommitdiff
path: root/.circleci/config.yml
diff options
context:
space:
mode:
Diffstat (limited to '.circleci/config.yml')
-rw-r--r--.circleci/config.yml324
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: