daml/ci/dev-env-install.sh

57 lines
1.5 KiB
Bash
Raw Normal View History

2019-04-04 11:33:38 +03:00
#!/usr/bin/env bash
# Copyright (c) 2022 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2019-04-04 11:33:38 +03:00
# SPDX-License-Identifier: Apache-2.0
# shellcheck disable=SC2174
2019-04-04 11:33:38 +03:00
# Installs nix on a fresh machine
set -euo pipefail
2019-04-04 11:33:38 +03:00
2019-04-04 14:03:56 +03:00
## Functions ##
step() {
echo "step: $*" >&2
}
## Main ##
cd "$(dirname "$0")/.."
if [[ ! -e /nix ]]; then
step "Installing Nix"
sudo mkdir -m 0755 /nix
sudo chown "$(id -u):$(id -g)" /nix
2019-04-04 14:03:56 +03:00
curl -sSfL https://releases.nixos.org/nix/nix-2.3.15/install | bash
fi
2019-04-04 14:03:56 +03:00
# shellcheck source=../dev-env/lib/ensure-nix
source dev-env/lib/ensure-nix
export NIX_CONF_DIR=$PWD/dev-env/etc
2019-04-04 14:03:56 +03:00
step "Building dev-env dependencies"
# Nix cache downloads can sometimes be flaky and end with "unexpected end-of-file" so we
# repeat this a few times. There does not seem to be an option that we can pass to nix
# to make it retry itself. See https://github.com/NixOS/nix/issues/2794 for the issue requesting
# this feature.
NIX_FAILED=0
for i in `seq 10`; do
NIX_FAILED=0
nix-build --no-out-link nix -A tools -A ci-cached 2>&1 | tee nix_log || NIX_FAILED=1
# It should be in the last line but lets use the last 3 and wildcards
# to be robust against slight changes.
if [[ $NIX_FAILED -ne 0 ]] &&
([[ $(tail -n 3 nix_log) == *"unexpected end-of-file"* ]] ||
[[ $(tail -n 3 nix_log) == *"decompressing xz file"* ]]); then
echo "Restarting nix-build due to failed cache download"
continue
fi
break
done
if [[ $NIX_FAILED -ne 0 ]]; then
exit 1
fi