mirror of
https://github.com/digital-asset/daml.git
synced 2024-11-10 10:46:11 +03:00
e40aad897f
* move most files * update CI configuration
150 lines
4.9 KiB
Bash
Executable File
150 lines
4.9 KiB
Bash
Executable File
#!/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 )"
|
||
|
||
cd "$DIR"
|
||
|
||
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
|