blob: 1ec2b1fc0518fed1a0567d4154d3c63609aa866b (
plain) (
tree)
|
|
version: 2
# NOTE:
# Disk cache:
# We don't want to keep old artifacts around so we always build from
# scratch on master builds and upload the new cache afterwards. Because
# Circle doesn't allow skipping a "restore_cache" we create a dummy
# "empty" cache that's only ever pulled on master. Alternatively we could
# ask Bazel to clean up old items (LRU style) but the documentation is
# very terse and I could not figure how to do it:
# https://docs.bazel.build/versions/master/remote-caching.html
# It also appears that there's ongoing work but the feature is not ready:
# https://github.com/bazelbuild/bazel/issues/5139
#
# Currently the disk cache is only implemented for the Darwin builds,
# which were the slowest ones. There is no reason why a disk cache
# couldn't be used for the other jobs: I just haven't gotten around to
# doing it.
jobs:
build-linux-ghc-bindist:
docker:
- image: debian
working_directory: ~/rules_haskell
resource_class: large
steps:
- checkout
- run:
name: Setup test environment
command: |
apt-get update
apt-get install -y wget gnupg golang make libgmp3-dev libtinfo-dev pkg-config zip g++ zlib1g-dev unzip python bash-completion locales
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
wget "https://github.com/bazelbuild/bazel/releases/download/0.24.0/bazel_0.24.0-linux-x86_64.deb"
dpkg -i bazel_0.24.0-linux-x86_64.deb
echo "common:ci --build_tag_filters -requires_hackage,-requires_zlib,-requires_doctest,-requires_c2hs,-requires_threaded_rts,-dont_test_with_bindist" > .bazelrc.local
- run:
name: Build tests
command: |
bazel build --config ci //tests/...
- run:
name: Run tests
command: |
# Run the start script test.
# Doesn't use the test suite binary, because that depends on nixpkgs dependencies.
./tests/run-start-script.sh
# TODO: enable all tests for bindists
# (this will require tests to both work with nixpkgs and hazel backends)
# ATTN: when you change anything here, don’t forget to copy it to the build-darwin section
build-linux-nixpkgs:
docker:
- image: nixos/nix:2.1.3
working_directory: ~/rules_haskell
resource_class: large
steps:
- checkout
- run:
name: System dependencies
command: |
set -e
apk --no-progress update
apk --no-progress add bash ca-certificates
mkdir -p /etc/nix
# CircleCI and Nix sandboxing don't play nice. See
# https://discourse.nixos.org/t/nixos-on-ovh-kimsufi-cloning-builder-process-operation-not-permitted/1494/5
echo "sandbox = false" > /etc/nix/nix.conf
# No builders and no local jobs ensures that everything has to come from a binary cache
# If we want to add packages that are not cached by the offical NixOS binary cache,
# we need to manually build them (e.g. `nix-build -A <dependency> --max-jobs <no-cpu-cores>`).
# This is a sanity check.
echo "builders =" >> /etc/nix/nix.conf
echo "max-jobs = 0" >> /etc/nix/nix.conf
- run:
name: Configure
command: |
echo "build:ci --host_platform=@io_tweag_rules_haskell//haskell/platforms:linux_x86_64_nixpkgs" > .bazelrc.local
- run:
name: Build tests
command: |
nix-shell --arg docTools false --pure --run \
'bazel build --config ci //tests/...'
- run:
name: Run tests
# bazel does not support recursive bazel call, so we
# cannot use bazel run here because the test runner uses
# bazel
command: |
nix-shell --arg docTools false --pure --run \
'bazel build --config ci //tests:run-tests'
# TODO(Profpatsch) re-add a nixpkgs startup script
# and enable this test again
nix-shell --arg docTools false --pure --run \
'./bazel-ci-bin/tests/run-tests --skip "/startup script/"'
nix-shell --arg docTools false --pure --run \
'bazel coverage //tests/... --config ci --build_tag_filters "coverage-compatible" --test_tag_filters "coverage-compatible" --test_output=all'
build-darwin:
macos:
xcode: "9.0"
steps:
- checkout
- run:
name: Install Nix
command: |
curl https://nixos.org/nix/install | sh
- run:
name: Install cachix
shell: /bin/bash -eilo pipefail
command: |
nix-env -iA cachix -f https://github.com/NixOS/nixpkgs/tarball/db557aab7b690f5e0e3348459f2e4dc8fd0d9298
- run:
name: Run cachix
shell: /bin/bash -eilo pipefail
command: |
cachix use tweag
cachix push tweag --watch-store
background: true
- run:
name: Configure
command: |
mkdir -p ~/.cache/bazel/
echo "build:ci --host_platform=@io_tweag_rules_haskell//haskell/platforms:darwin_x86_64_nixpkgs" >> .bazelrc.local
echo "build:ci --disk_cache=~/.cache/bazel/" >> .bazelrc.local
echo "common:ci --test_tag_filters -dont_test_on_darwin" >> .bazelrc.local
- restore_cache:
keys: # see note about 'Disk cache'
- v1-rules_haskell-empty-{{ .Branch }}-
- v1-rules_haskell-cache-{{ .Branch }}-
- v1-rules_haskell-cache-master-
- run:
name: Build tests
shell: /bin/bash -eilo pipefail
command: |
nix-shell --arg docTools false --pure --run \
'bazel build --config ci //tests/...'
- run:
name: Run tests
shell: /bin/bash -eilo pipefail
command: |
# Keep CI awake
while true; do echo "."; sleep 60; done &
nix-shell --arg docTools false --pure --run \
'bazel build --config ci //tests:run-tests'
# XXX 2019-01-22 Disable start script checking on Darwin
# due to a clash between binutils and clang.
nix-shell --arg docTools false --pure --run \
'./bazel-ci-bin/tests/run-tests --skip "/startup script/"'
nix-shell --arg docTools false --pure --run \
'bazel coverage //tests/... --config ci --build_tag_filters "coverage-compatible" --test_tag_filters "coverage-compatible" --test_output=all'
# see note about 'Disk cache'
- save_cache:
key: v1-rules_haskell-cache-{{ .Branch }}-{{ .BuildNum }}
paths:
- ~/.cache/bazel/
- run:
name: Clean up cache
shell: /bin/bash -eilo pipefail
command: |
rm -rf ~/.cache/bazel/
mkdir -p ~/.cache/bazel/
- save_cache:
key: v1-rules_haskell-empty-master-{{ .BuildNum }}
paths:
- ~/.cache/bazel/
workflows:
version: 2
build:
jobs:
- build-linux-ghc-bindist
- build-linux-nixpkgs
- build-darwin:
context: org-global # for the cachix token
|