Commit b6237131 authored by Ben Gamari's avatar Ben Gamari 🐢

Grab CI configuration from master

This is awfully ugly but is nevertheless significantly less error-prone
than cherry-picking all of the relevant commits manually.
parent c6827011
...@@ -15,21 +15,22 @@ aliases: ...@@ -15,21 +15,22 @@ aliases:
name: submodules name: submodules
command: .circleci/fetch-submodules.sh command: .circleci/fetch-submodules.sh
- &buildenv - &buildenv
THREADS: 9 # ideally we would simply set THREADS here instead of re-detecting it every
SKIP_PERF_TESTS: YES # 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 VERBOSE: 2
- &boot - &boot
run: run:
name: Boot name: Boot
command: | command: |
./boot ./boot
- &set_git_identity
cat <<EOF >> mk/build.mk run:
BuildFlavour=$BUILD_FLAVOUR name: Set Git Identity
ifneq "\$(BuildFlavour)" "" command: |
include mk/flavours/\$(BuildFlavour).mk git config user.email "ghc-circleci@haskell.org"
endif git config user.name "GHC CircleCI"
EOF
- &configure_unix - &configure_unix
run: run:
name: Configure name: Configure
...@@ -50,131 +51,197 @@ aliases: ...@@ -50,131 +51,197 @@ aliases:
- &make - &make
run: run:
name: Build name: Build
command: "make -j$THREADS V=0" command: "make -j`mk/detect-cpu-count.sh` V=0"
- &build_hadrian - &build_hadrian
run: run:
name: Build GHC using Hadrian name: Build GHC using Hadrian
command: | command: |
cabal update cabal update
hadrian/build.sh -j$THREADS hadrian/build.sh -j`mk/detect-cpu-count.sh`
- &test - &test
run: run:
name: Test name: Test
command: | command: |
mkdir -p test-results 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
store_test_results: store_test_results:
path: 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 - &slowtest
run: run:
name: Full Test 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 - &bindist
run: run:
name: Create bindist name: Create bindist
# Reduce compression effort to 3 # 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 # Building bindist takes ~15 minutes without output, account for
# that. # that.
no_output_timeout: "30m" no_output_timeout: "30m"
- &storeartifacts - &store_bindist
run: store_artifacts:
name: Store artifacts path: ghc.tar.xz
command: | - &only_release_tags
curl https://ghc-artifacts.s3.amazonaws.com/tools/ghc-artifact-collector-$GHC_COLLECTOR_FLAVOR --output ghc-artifact-collector tags:
chmod +x ghc-artifact-collector only: /^ghc-.*/
./ghc-artifact-collector ghc*.tar.xz - &ignore_gitlab_branches
- &trigger_on_tags branches:
filters: ignore: /^gitlab\/.*/
tags:
only: /^ghc-.*/
jobs: jobs:
"validate-x86_64-linux": "validate-x86_64-freebsd":
resource_class: xlarge 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: docker:
- image: ghcci/x86_64-linux:0.0.4 - image: ghcci/x86_64-linux-deb8:0.1
environment: environment:
<<: *buildenv <<: *buildenv
GHC_COLLECTOR_FLAVOR: x86_64-linux GHC_COLLECTOR_FLAVOR: x86_64-linux
TEST_ENV: x86_64-linux-deb8
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_unix - *configure_unix
- *make - *make
- *bindist - *bindist
- *storeartifacts - *store_bindist
- *test - *test
- *store_test_results - *store_test_results
- *store_test_artifacts
- *push_perf_note
"validate-x86_64-freebsd": "validate-x86_64-linux-deb9-integer-simple":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-freebsd - image: ghcci/x86_64-linux-deb9:0.2
environment: environment:
TARGET: FreeBSD
<<: *buildenv <<: *buildenv
GHC_COLLECTOR_FLAVOR: x86_64-freebsd INTEGER_LIBRARY: integer-simple
GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_bsd - *configure_unix
- *make - *make
- *bindist - *bindist
- *storeartifacts - *store_bindist
- *test - *test
- *store_test_results - *store_test_results
- *store_test_artifacts
- *push_perf_note
"validate-x86_64-darwin": "validate-x86_64-linux-deb9":
macos: docker:
xcode: "9.0" - image: ghcci/x86_64-linux-deb9:0.1
environment: 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 <<: *buildenv
GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9
TEST_ENV: x86_64-linux-deb9
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_unix - *configure_unix
- *make - *make
- *bindist - *bindist
- *storeartifacts - *store_bindist
- *test - *test
- *store_test_results - *store_test_results
- *store_test_artifacts
- *push_perf_note
"validate-hadrian-x86_64-linux": "validate-hadrian-x86_64-linux-deb8":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-linux:0.0.4 - image: ghcci/x86_64-linux-deb8:0.1
environment: environment:
<<: *buildenv <<: *buildenv
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_unix - *configure_unix
- *build_hadrian - *build_hadrian
"validate-x86_64-linux-unreg": "validate-x86_64-linux-deb8-unreg":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-linux:0.0.4 - image: ghcci/x86_64-linux-deb8:0.1
environment: environment:
<<: *buildenv <<: *buildenv
TEST_ENV: x86_64-linux-deb8-unreg
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
...@@ -182,41 +249,44 @@ jobs: ...@@ -182,41 +249,44 @@ jobs:
- *make - *make
- *test - *test
- *store_test_results - *store_test_results
- *push_perf_note
- *store_test_artifacts
"validate-x86_64-linux-llvm": "validate-x86_64-linux-deb9-llvm":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-linux:0.0.4 - image: ghcci/x86_64-linux-deb9:0.2
environment: environment:
<<: *buildenv <<: *buildenv
BUILD_FLAVOUR: perf-llvm BUILD_FLAVOUR: perf-llvm
TEST_ENV: x86_64-linux-deb9-llvm
steps: 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: - run:
name: Verify that llc works name: Verify that llc works
command: llc command: llc
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_unix - *configure_unix
- *make - *make
- *slowtest - *test
- *store_test_results
- *store_test_artifacts
- *push_perf_note
# Nightly build with -DDEBUG using devel2 flavour # Nightly build with -DDEBUG using devel2 flavour
"validate-x86_64-linux-debug": "validate-x86_64-linux-deb8-debug":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-linux:0.0.4 - image: ghcci/x86_64-linux-deb8:0.1
environment: environment:
BUILD_FLAVOUR: devel2 BUILD_FLAVOUR: devel2
<<: *buildenv <<: *buildenv
TEST_ENV: x86_64-linux-deb8-debug
SKIP_PERF_TESTS: YES
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
...@@ -224,52 +294,106 @@ jobs: ...@@ -224,52 +294,106 @@ jobs:
- *make - *make
- *test - *test
- *store_test_results - *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": "validate-i386-linux-deb8":
resource_class: xlarge
docker: docker:
- image: ghcci/i386-linux:0.0.5 - image: ghcci/i386-linux-deb8:0.1
environment: environment:
<<: *buildenv <<: *buildenv
GHC_COLLECTOR_FLAVOR: i386-linux GHC_COLLECTOR_FLAVOR: i386-linux
TEST_ENV: i386-linux-deb8
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_unix_32 - *configure_unix_32
- *make - *make
- *bindist - *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 - *test
- *store_test_results - *store_test_results
- *store_test_artifacts
- *push_perf_note
"validate-x86_64-fedora": "validate-x86_64-linux-fedora27":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-linux-fedora:0.0.15 - image: ghcci/x86_64-linux-fedora27:0.1
environment: environment:
<<: *buildenv <<: *buildenv
GHC_COLLECTOR_FLAVOR: x86_64-fedora GHC_COLLECTOR_FLAVOR: x86_64-fedora
TEST_ENV: x86_64-linux-fedora27
steps: steps:
- checkout - checkout
- *set_git_identity
- *prepare - *prepare
- *submodules - *submodules
- *boot - *boot
- *configure_unix - *configure_unix
- *make - *make
- *bindist - *bindist
- *storeartifacts - *store_bindist
- *test - *test
- *store_test_results - *store_test_results
- *store_test_artifacts
- *push_perf_note
"slow-validate-x86_64-linux": "slow-validate-x86_64-linux-deb8":
resource_class: xlarge
docker: docker:
- image: ghcci/x86_64-linux:0.0.4 - image: ghcci/x86_64-linux-deb8:0.1
environment: environment:
<<: *buildenv <<: *buildenv
GHC_COLLECTOR_FLAVOR: x86_64-linux GHC_COLLECTOR_FLAVOR: x86_64-linux-deb8
steps: steps:
- checkout - checkout
- *prepare - *prepare
...@@ -278,23 +402,43 @@ jobs: ...@@ -278,23 +402,43 @@ jobs:
- *configure_unix - *configure_unix
- *make - *make
- *slowtest - *slowtest
- *store_test_results
- *store_test_artifacts
- *push_perf_note
workflows: workflows:
version: 2 version: 2
validate: validate:
jobs: jobs:
- validate-x86_64-linux: - validate-x86_64-linux-deb8:
*trigger_on_tags filters:
<<: [*only_release_tags, *ignore_gitlab_branches]
# FreeBSD disabled: https://github.com/haskell/unix/issues/102 # FreeBSD disabled: https://github.com/haskell/unix/issues/102
# - validate-x86_64-freebsd # - validate-x86_64-freebsd
- validate-x86_64-darwin: - validate-x86_64-darwin:
*trigger_on_tags filters:
- validate-x86_64-linux-llvm <<: [*only_release_tags, *ignore_gitlab_branches]
- validate-i386-linux: - validate-x86_64-linux-deb8-llvm:
*trigger_on_tags filters:
- validate-hadrian-x86_64-linux <<: *ignore_gitlab_branches
- validate-x86_64-fedora: - validate-i386-linux-deb8:
*trigger_on_tags 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: nightly:
triggers: triggers:
...@@ -305,10 +449,12 @@ workflows: ...@@ -305,10 +449,12 @@ workflows:
only: only:
- master - master
jobs: jobs:
- validate-x86_64-linux-unreg - validate-x86_64-linux-deb8-unreg
- validate-x86_64-linux-llvm - validate-x86_64-linux-deb8-llvm
- validate-x86_64-linux-debug - validate-x86_64-linux-deb8-debug
- slow-validate-x86_64-linux - validate-x86_64-linux-deb9
- validate-x86_64-linux-deb9-integer-simple
- slow-validate-x86_64-linux-deb8
notify: notify:
webhooks: webhooks:
......
FROM aarch64/debian:stretch
ENV LANG C.UTF-8