forked from digital-asset/daml
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·149 lines (128 loc) · 4.97 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/usr/bin/env bash
# Copyright (c) 2024 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
set -euo pipefail
DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
eval "$("$(dirname "$0")/dev-env/bin/dade-assist")"
execution_log_postfix=${1:-}${2:-}
test_mode=${3:-main}
export LC_ALL=en_US.UTF-8
ARTIFACT_DIRS="${BUILD_ARTIFACTSTAGINGDIRECTORY:-$PWD}"
mkdir -p "${ARTIFACT_DIRS}/logs"
has_run_all_tests_trailer() {
if (( 2 == $(git show -s --format=%p HEAD | wc -w) )); then
ref="HEAD^2"
else
ref="HEAD"
fi
commit=$(git rev-parse $ref)
run_all_tests=$(git log -n1 --format="%(trailers:key=run-all-tests,valueonly)" $commit)
[[ $run_all_tests == "true" ]]
}
tag_filter=""
case $test_mode in
main)
echo "running all tests because test mode is 'main'"
;;
# When running against a PR, exclude "main-only" tests, unless the commit message features a
# 'run-all-tests: true' trailer
pr)
if has_run_all_tests_trailer; then
echo "ignoring 'pr' test mode because the commit message features 'run-all-tests: true'"
else
echo "running fewer tests because test mode is 'pr'"
tag_filter="-main-only"
fi
;;
*)
echo "unknown test mode: $test_mode"
exit 1
;;
esac
if [[ "$(uname)" == "Darwin" ]]; then
tag_filter="$tag_filter,-dont-run-on-darwin,-scaladoc,-pdfdocs"
fi
SKIP_DEV_CANTON_TESTS=false
if [ "$SKIP_DEV_CANTON_TESTS" = "true" ]; then
tag_filter="$tag_filter,-dev-canton-test"
fi
# remove possible leading comma
tag_filter="${tag_filter#,}"
# Occasionally we end up with a stale sandbox process for a hardcoded
# port number. Not quite sure how we end up with a stale process
# but it happens sufficiently rarely that just killing it here is
# a cheaper solution than having to reset the node.
# Note that lsof returns a non-zero exit code if there is no match.
SANDBOX_PID="$(lsof -ti tcp:6865 || true)"
if [ -n "$SANDBOX_PID" ]; then
echo $SANDBOX_PID | xargs kill
fi
if [ "${1:-}" = "_m1" ]; then
bazel="arch -arm64 bazel"
else
bazel=bazel
fi
# Bazel test only builds targets that are dependencies of a test suite so do a full build first.
$bazel build //... \
--build_tag_filters "${tag_filter}" \
--profile build-profile.json \
--experimental_profile_include_target_label \
--build_event_json_file build-events.json \
--build_event_publish_all_actions \
--execution_log_json_file "$ARTIFACT_DIRS/logs/build_execution${execution_log_postfix}.json.gz"
# Set up a shared PostgreSQL instance.
export POSTGRESQL_ROOT_DIR="${POSTGRESQL_TMP_ROOT_DIR:-$DIR/.tmp-pg}/daml/postgresql"
export POSTGRESQL_DATA_DIR="${POSTGRESQL_ROOT_DIR}/data"
export POSTGRESQL_LOG_FILE="${POSTGRESQL_ROOT_DIR}/postgresql.log"
export POSTGRESQL_HOST='localhost'
export POSTGRESQL_PORT=54321
export POSTGRESQL_USERNAME='test'
export POSTGRESQL_PASSWORD=''
function start_postgresql() {
mkdir -p "$POSTGRESQL_DATA_DIR"
bazel run -- @postgresql_dev_env//:initdb --auth=trust --encoding=UNICODE --locale=en_US.UTF-8 --username="$POSTGRESQL_USERNAME" "$POSTGRESQL_DATA_DIR"
eval "echo \"$(cat ci/postgresql.conf)\"" > "$POSTGRESQL_DATA_DIR/postgresql.conf"
bazel run -- @postgresql_dev_env//:pg_ctl -w --pgdata="$POSTGRESQL_DATA_DIR" --log="$POSTGRESQL_LOG_FILE" start || {
if [[ -f "$POSTGRESQL_LOG_FILE" ]]; then
echo >&2 'PostgreSQL logs:'
cat >&2 "$POSTGRESQL_LOG_FILE"
fi
return 1
}
}
function stop_postgresql() {
if [[ -e "$POSTGRESQL_DATA_DIR" ]]; then
bazel run -- @postgresql_dev_env//:pg_ctl -w --pgdata="$POSTGRESQL_DATA_DIR" --mode=immediate stop || :
rm -rf "$POSTGRESQL_ROOT_DIR"
fi
}
trap stop_postgresql EXIT
stop_postgresql # in case it's running from a previous build
start_postgresql
# Run the tests.
echo "Running bazel test with the following tag filters: ${tag_filter}"
$bazel test //... \
--build_tag_filters "${tag_filter}" \
--test_tag_filters "${tag_filter}" \
--test_env "POSTGRESQL_HOST=${POSTGRESQL_HOST}" \
--test_env "POSTGRESQL_PORT=${POSTGRESQL_PORT}" \
--test_env "POSTGRESQL_USERNAME=${POSTGRESQL_USERNAME}" \
--test_env "POSTGRESQL_PASSWORD=${POSTGRESQL_PASSWORD}" \
--profile test-profile.json \
--experimental_profile_include_target_label \
--build_event_json_file test-events.json \
--build_event_publish_all_actions \
--execution_log_json_file "$ARTIFACT_DIRS/logs/test_execution${execution_log_postfix}.json.gz"
# Make sure that Bazel query works.
$bazel query 'deps(//...)' >/dev/null
# Check that we can load damlc in ghci
# Disabled on darwin since it sometimes seem to hang and this only
# tests our dev setup rather than our code so issues are not critical.
if [[ "$(uname)" != "Darwin" ]]; then
da-ghci --data yes //compiler/damlc:damlc -e ':main --help'
fi
# Test that hls at least builds, we don’t run it since it
# adds 2-5 minutes to each CI run with relatively little benefit. If
# you want to test it manually on upgrades, run
# da-hls compiler/damlc/exe/Main.hs.
da-hls --help