feat(third_party/bazel): Check in rules_haskell from Tweag
This commit is contained in:
parent
2eb1dc26e4
commit
f723b8b878
479 changed files with 51484 additions and 0 deletions
188
third_party/bazel/rules_haskell/.circleci/config.yml
vendored
Normal file
188
third_party/bazel/rules_haskell/.circleci/config.yml
vendored
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue