emqx/scripts/test/check-example-configs.sh

55 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
cd -P -- "$(dirname -- "$0")/../.."
PROFILE="${PROFILE:-emqx}"
DIR_NAME='examples'
SCHEMA_MOD='emqx_conf_schema'
if [ "${PROFILE}" = 'emqx-enterprise' ]; then
DIR_NAME='ee-examples'
SCHEMA_MOD='emqx_enterprise_schema'
fi
IFS=$'\n' read -r -d '' -a FILES < <(find "rel/config/${DIR_NAME}" -name "*.example" 2>/dev/null | sort && printf '\0')
prepare_erl_libs() {
local libs_dir="$1"
local erl_libs="${ERL_LIBS:-}"
local sep=':'
for app in "${libs_dir}"/*; do
if [ -d "${app}/ebin" ]; then
if [ -n "$erl_libs" ]; then
erl_libs="${erl_libs}${sep}${app}"
else
erl_libs="${app}"
fi
fi
done
export ERL_LIBS="$erl_libs"
}
# This is needed when checking schema
export EMQX_ETC_DIR="apps/emqx/etc"
prepare_erl_libs "_build/$PROFILE/lib"
check_file() {
local file="$1"
erl -noshell -eval \
"File=\"$file\",
case emqx_hocon:load_and_check($SCHEMA_MOD, File) of
{ok, _} ->
io:format(\"check_example_config_ok: ~s~n\", [File]),
halt(0);
{error, Reason} ->
io:format(\"failed_to_check_example_config: ~s~n~p~n\", [File, Reason]),
halt(1)
end."
}
for file in "${FILES[@]}"; do
check_file "$file"
done