From 388654c5422409ccb7f26bf9e267d9aff4a52ba0 Mon Sep 17 00:00:00 2001 From: Philip Kuryloski Date: Mon, 29 Mar 2021 11:01:43 +0200 Subject: Add a partial Bazel build (#2938) Adds WORKSPACE.bazel, BUILD.bazel & *.bzl files for partial build & test with Bazel. Introduces a build-time dependency on https://github.com/rabbitmq/bazel-erlang --- scripts/bazel/kill_orphaned_ct_run.sh | 7 ++ scripts/bazel/rabbitmq-run.sh | 192 ++++++++++++++++++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100755 scripts/bazel/kill_orphaned_ct_run.sh create mode 100644 scripts/bazel/rabbitmq-run.sh (limited to 'scripts') diff --git a/scripts/bazel/kill_orphaned_ct_run.sh b/scripts/bazel/kill_orphaned_ct_run.sh new file mode 100755 index 0000000000..db53073bdd --- /dev/null +++ b/scripts/bazel/kill_orphaned_ct_run.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -euo pipefail + +pids=$(ps aux | grep -v awk | awk '/ct_run.*erl/ {print $2}') + +set -x +kill $pids diff --git a/scripts/bazel/rabbitmq-run.sh b/scripts/bazel/rabbitmq-run.sh new file mode 100644 index 0000000000..d79afc1d97 --- /dev/null +++ b/scripts/bazel/rabbitmq-run.sh @@ -0,0 +1,192 @@ +#!/usr/bin/env bash +set -euo pipefail + +# https://stackoverflow.com/a/4774063 +SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +if [ $1 = "-C" ]; then + cd $2 + shift 2 +fi + +for arg in "$@"; do + case $arg in + run-broker) + CMD="$arg" + ;; + start-background-broker) + CMD="$arg" + ;; + stop-node) + CMD="$arg" + ;; + set-resource-alarm) + CMD="$arg" + ;; + clear-resource-alarm) + CMD="$arg" + ;; + *) + export "$arg" + ;; + esac +done + +DEFAULT_PLUGINS_DIR=${SCRIPTPATH}/{RABBITMQ_HOME}/plugins +if [ ! -z ${EXTRA_PLUGINS_DIR+x} ]; then + DEFAULT_PLUGINS_DIR=${DEFAULT_PLUGINS_DIR}:${EXTRA_PLUGINS_DIR} +fi + +TEST_TMPDIR=${TEST_TMPDIR:=${TMPDIR}/rabbitmq-test-instances} +RABBITMQ_SCRIPTS_DIR=${SCRIPTPATH}/{RABBITMQ_HOME}/sbin +RABBITMQ_PLUGINS=${RABBITMQ_SCRIPTS_DIR}/rabbitmq-plugins +RABBITMQ_SERVER=${RABBITMQ_SCRIPTS_DIR}/rabbitmq-server +RABBITMQCTL=${RABBITMQ_SCRIPTS_DIR}/rabbitmqzctl + +export RABBITMQ_SCRIPTS_DIR RABBITMQCTL RABBITMQ_PLUGINS RABBITMQ_SERVER + +HOSTNAME="$(hostname -s)" + +RABBITMQ_NODENAME=${RABBITMQ_NODENAME:=rabbit@${HOSTNAME}} +RABBITMQ_NODENAME_FOR_PATHS=${RABBITMQ_NODENAME_FOR_PATHS:=${RABBITMQ_NODENAME}} +NODE_TMPDIR=${TEST_TMPDIR}/${RABBITMQ_NODENAME_FOR_PATHS} + +RABBITMQ_BASE=${NODE_TMPDIR} +RABBITMQ_PID_FILE=${NODE_TMPDIR}/${RABBITMQ_NODENAME_FOR_PATHS}.pid +RABBITMQ_LOG_BASE=${NODE_TMPDIR}/log +RABBITMQ_MNESIA_BASE=${NODE_TMPDIR}/mnesia +RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME_FOR_PATHS} +RABBITMQ_QUORUM_DIR=${RABBITMQ_MNESIA_DIR}/quorum +RABBITMQ_STREAM_DIR=${RABBITMQ_MNESIA_DIR}/stream +RABBITMQ_PLUGINS_DIR=${RABBITMQ_PLUGINS_DIR:=${DEFAULT_PLUGINS_DIR}} +RABBITMQ_PLUGINS_EXPAND_DIR=${NODE_TMPDIR}/plugins +RABBITMQ_FEATURE_FLAGS_FILE=${NODE_TMPDIR}/feature_flags +RABBITMQ_ENABLED_PLUGINS_FILE=${NODE_TMPDIR}/enabled_plugins + +RABBITMQ_SERVER_START_ARGS="${RABBITMQ_SERVER_START_ARGS:=-ra wal_sync_method sync}" + +# Enable colourful debug logging by default +# To change this, set RABBITMQ_LOG to info, notice, warning etc. +RABBITMQ_LOG=${RABBITMQ_LOG:='debug,+color'} +export RABBITMQ_LOG + +if [ -z ${LEAVE_PLUGINS_DISABLED+x} ]; then + RABBITMQ_ENABLED_PLUGINS=ALL +else + RABBITMQ_ENABLED_PLUGINS= +fi + +mkdir -p ${TEST_TMPDIR} + +mkdir -p ${RABBITMQ_LOG_BASE} +mkdir -p ${RABBITMQ_MNESIA_BASE} +mkdir -p ${RABBITMQ_PLUGINS_EXPAND_DIR} + +export \ + RABBITMQ_NODENAME \ + RABBITMQ_NODE_IP_ADDRESS \ + RABBITMQ_BASE \ + RABBITMQ_PID_FILE \ + RABBITMQ_LOG_BASE \ + RABBITMQ_MNESIA_BASE \ + RABBITMQ_MNESIA_DIR \ + RABBITMQ_QUORUM_DIR \ + RABBITMQ_STREAM_DIR \ + RABBITMQ_FEATURE_FLAGS_FILE \ + RABBITMQ_PLUGINS_DIR \ + RABBITMQ_PLUGINS_EXPAND_DIR \ + RABBITMQ_SERVER_START_ARGS \ + RABBITMQ_ENABLED_PLUGINS \ + RABBITMQ_ENABLED_PLUGINS_FILE + +write_config_file() { +cat << EOF > ${RABBITMQ_CONFIG_FILE} +%% vim:ft=erlang: + +[ + {rabbit, [ + {loopback_users, []}, + {log, [{file, [{level, debug}]}, + {console, [{level, debug}]}]} + ]}, + {rabbitmq_management, [ + ]}, + {rabbitmq_mqtt, [ + ]}, + {rabbitmq_stomp, [ + ]}, + {ra, [ + {data_dir, "${RABBITMQ_QUORUM_DIR}"}, + {wal_sync_method, sync} + ]}, + {lager, [ + {colors, [ + %% https://misc.flogisoft.com/bash/tip_colors_and_formatting + {debug, "\\\e[0;34m" }, + {info, "\\\e[1;37m" }, + {notice, "\\\e[1;36m" }, + {warning, "\\\e[1;33m" }, + {error, "\\\e[1;31m" }, + {critical, "\\\e[1;35m" }, + {alert, "\\\e[1;44m" }, + {emergency, "\\\e[1;41m" } + ]} + ]}, + {osiris, [ + {data_dir, "${RABBITMQ_STREAM_DIR}"} + ]} +]. +EOF +} + +case $CMD in + run-broker) + export RABBITMQ_ALLOW_INPUT=true + export RABBITMQ_CONFIG_FILE=${TEST_TMPDIR}/test.config + write_config_file + ${RABBITMQ_SCRIPTS_DIR}/rabbitmq-server + ;; + start-background-broker) + RMQCTL_WAIT_TIMEOUT=${RMQCTL_WAIT_TIMEOUT:=60} + + ${RABBITMQ_SCRIPTS_DIR}/rabbitmq-server \ + > ${RABBITMQ_LOG_BASE}/startup_log \ + 2> ${RABBITMQ_LOG_BASE}/startup_err & + + # rabbitmqctl wait shells out to 'ps', which is broken in the bazel macOS + # sandbox (https://github.com/bazelbuild/bazel/issues/7448) + # adding "--spawn_strategy=local" to the invocation is a workaround + ${RABBITMQ_SCRIPTS_DIR}/rabbitmqctl \ + -n ${RABBITMQ_NODENAME} \ + wait \ + --timeout ${RMQCTL_WAIT_TIMEOUT} \ + ${RABBITMQ_PID_FILE} + + {ERLANG_HOME}/bin/erl \ + -noinput \ + -eval "true = rpc:call('${RABBITMQ_NODENAME}', rabbit, is_running, []), halt()." \ + -sname {SNAME} \ + -hidden + ;; + stop-node) + pid=$(test -f $RABBITMQ_PID_FILE && cat $RABBITMQ_PID_FILE); \ + test "$pid" && \ + kill -TERM "$pid" && \ + echo "waiting for process to exit" && \ + while ps -p "$pid" >/dev/null 2>&1; do sleep 1; done + ;; + set-resource-alarm) + ERL_LIBS="{ERL_LIBS}" \ + ${RABBITMQ_SCRIPTS_DIR}/rabbitmqctl -n ${RABBITMQ_NODENAME} \ + eval "rabbit_alarm:set_alarm({{resource_limit, ${SOURCE}, node()}, []})." + ;; + clear-resource-alarm) + ERL_LIBS="{ERL_LIBS}" \ + ${RABBITMQ_SCRIPTS_DIR}/rabbitmqctl -n ${RABBITMQ_NODENAME} \ + eval "rabbit_alarm:clear_alarm({resource_limit, ${SOURCE}, node()})." + ;; + *) + echo "rabbitmq-run does not support $CMD" + exit 1 + ;; +esac -- cgit v1.2.1