summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>2017-11-07 10:52:38 +0000
committerMateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>2017-11-07 10:54:02 +0000
commited18f47f931361a9adbb109085c6feb432ec41aa (patch)
tree7dac8ab5dc7730957e8133997664022656dccd48
parent07e0d0d56eba1c599e93a238c857431d15f33fa1 (diff)
downloadhaskell-ed18f47f931361a9adbb109085c6feb432ec41aa.tar.gz
Factor out builds into steps. Address ghc/ghc#83 comments.
This should greatly improve log output.
-rwxr-xr-x.circleci/build.sh59
-rw-r--r--.circleci/config.yml91
-rwxr-xr-x.circleci/prepare-system.sh24
3 files changed, 88 insertions, 86 deletions
diff --git a/.circleci/build.sh b/.circleci/build.sh
deleted file mode 100755
index 74d98fa380..0000000000
--- a/.circleci/build.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env bash
-# vim: sw=2 et
-
-set -euo pipefail
-
-fail() {
- echo "ERROR: $*" >&2
- exit 1
-}
-
-echo 'BUILD_SPHINX_HTML = NO' > mk/validate.mk
-echo 'BUILD_SPHINX_PDF = NO' >> mk/validate.mk
-
-cat > mk/build.mk <<EOF
-V=1
-HADDOCK_DOCS=YES
-LATEX_DOCS=YES
-HSCOLOUR_SRCS=YES
-BUILD_DOCBOOK_HTML=YES
-BeConservative=YES
-EOF
-
-export THREADS=8
-export SKIP_PERF_TESTS=YES
-export VERBOSE=2
-
-function run_build() {
- ./boot
- ./configure "$@"
- make -j$THREADS
- make fasttest
- make binary-dist
-}
-
-case "$(uname)" in
- Linux)
- if [[ -n ${TARGET:-} ]]; then
- if [[ $TARGET = FreeBSD ]]; then
- # cross-compiling to FreeBSD
- echo 'HADDOCK_DOCS = NO' >> mk/build.mk
- echo 'WERROR=' >> mk/build.mk
- export PATH=/opt/ghc/bin:$PATH
- run_build --target=x86_64-unknown-freebsd10
- else
- fail "TARGET=$target not supported"
- fi
- else
- run_build
- fi
- ;;
- Darwin)
- if [[ -n ${TARGET:-} ]]; then
- fail "uname=$(uname) not supported for cross-compilation"
- fi
- run_build
- ;;
- *)
- fail "uname=$(uname) not supported"
-esac
diff --git a/.circleci/config.yml b/.circleci/config.yml
index e38d265c29..c35ac219ec 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -3,6 +3,16 @@ version: 2
aliases:
- &defaults
working_directory: ~/ghc
+
+ # 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
- &prepare
run:
name: prepare-system
@@ -11,16 +21,40 @@ aliases:
run:
name: submodules
command: .circleci/fetch-submodules.sh
- - &build
+ - &buildenv
+ THREADS: 8
+ 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
+ - &make
run:
- name: build
- command: .circleci/build.sh
+ name: Build
+ command: "make -j$THREADS"
+ - &test
+ run:
+ name: Test
+ command: make test
+ - &bindist
+ run:
+ name: Create bindist
+ command: make binary-dist
# Building bindist takes ~15 minutes without output, account for
# that.
no_output_timeout: "30m"
- &collectartifacts
run:
- name: collect artifacts
+ name: Collect artifacts
# We need this because CircleCI expects a path without
# wildcards but bindist archive name is not static
command: |
@@ -28,28 +62,29 @@ aliases:
pwd
find .
cp ghc*.tar.xz /tmp/artifacts
+ - &storeartifacts
+ store-artifacts:
+ path: /tmp/artifacts
jobs:
"validate-x86_64-linux":
resource_class: xlarge
docker:
- image: haskell:8.2
+ environment:
+ <<: *buildenv
steps:
- # 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.
- - run:
- name: install openssh
- command: |
- apt-get update -qq
- apt-get install -y openssh-client
+ - *precheckout
- checkout
- *prepare
- *submodules
- - *build
+ - *boot
+ - *configure_unix
+ - *make
+ - *test
+ - *bindist
- *collectartifacts
- - store-artifacts:
- path: /tmp/artifacts
+ - *storeartifacts
"validate-x86_64-freebsd":
resource_class: xlarge
@@ -57,28 +92,36 @@ jobs:
- image: tweag/toolchain-x86_64-freebsd
environment:
TARGET: FreeBSD
+ <<: *buildenv
steps:
- - run:
- name: install git
- command: |
- apt-get update -qq
- apt-get install -qy openssh-client
+ - *precheckout
- checkout
- *prepare
- *submodules
- - *build
+ - *boot
+ - *configure_bsd
+ - *make
+ - *test
+ - *bindist
+ - *collectartifacts
+ - *storeartifacts
"validate-x86_64-darwin":
macos:
xcode: "9.0"
+ environment:
+ <<: *buildenv
steps:
- checkout
- *prepare
- *submodules
- - *build
+ - *boot
+ - *configure_unix
+ - *make
+ - *test
+ - *bindist
- *collectartifacts
- - store-artifacts:
- path: /tmp/artifacts
+ - *storeartifacts
workflows:
version: 2
diff --git a/.circleci/prepare-system.sh b/.circleci/prepare-system.sh
index 5d4d630bcb..063c70a328 100755
--- a/.circleci/prepare-system.sh
+++ b/.circleci/prepare-system.sh
@@ -7,6 +7,18 @@ fail() {
exit 1
}
+echo 'BUILD_SPHINX_HTML = NO' > mk/validate.mk
+echo 'BUILD_SPHINX_PDF = NO' >> mk/validate.mk
+
+cat > mk/build.mk <<EOF
+V=1
+HADDOCK_DOCS=YES
+LATEX_DOCS=YES
+HSCOLOUR_SRCS=YES
+BUILD_DOCBOOK_HTML=YES
+BeConservative=YES
+EOF
+
case "$(uname)" in
Linux)
if [[ -n ${TARGET:-} ]]; then
@@ -14,17 +26,23 @@ case "$(uname)" in
# cross-compiling to FreeBSD
add-apt-repository -y ppa:hvr/ghc
apt-get update -qq
- apt-get install -qy ghc-8.0.2 cabal-install alex happy ncurses-dev git openssh-client make automake autoconf gcc perl python3 texinfo xz-utils
+ apt-get install -qy ghc-8.0.2 cabal-install-1.24 alex happy \
+ ncurses-dev git make automake autoconf gcc perl \
+ python3 texinfo xz-utils
cabal update
cabal install --reinstall hscolour
ln -s $HOME/.cabal/bin/HsColour /usr/local/bin/HsColour
+
+ echo 'HADDOCK_DOCS = NO' >> mk/build.mk
+ echo 'WERROR=' >> mk/build.mk
+ # https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables
+ echo 'export PATH=/opt/ghc/bin:$PATH' >> $BASH_ENV
else
fail "TARGET=$target not supported"
fi
else
# assuming Ubuntu
- apt-get update -qq
- apt-get install -qy git openssh-client make automake autoconf gcc perl python3 texinfo xz-utils
+ apt-get install -qy git make automake autoconf gcc perl python3 texinfo xz-utils
cabal update
cabal install --reinstall hscolour
fi