Files
test-e2e/scripts/orchestra_e2e_healthcheck.sh
T

98 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
readonly VERSION=1.0.0
readonly ROOT=$(cd "$(dirname "$0")/.." && pwd)
# Space-separated check names; each has a check_<name> function.
CHECKS="repo_root_readable scripts_dir_present healthcheck_executable_bit
selftest_present test_healthcheck_present readme_present
no_crlf_line_endings no_tabs_in_scripts"
# name=ok / name=fail pairs, in run order.
RESULTS=
FAILED=0
TOTAL=0
# record <name> <status>: append one outcome to the results state.
record() {
RESULTS="$RESULTS $1=$2"
TOTAL=$((TOTAL + 1))
[ "$2" = ok ] || FAILED=$((FAILED + 1))
}
check_repo_root_readable() { [ -d "$ROOT" ] && [ -r "$ROOT" ]; }
check_scripts_dir_present() { [ -d "$ROOT/scripts" ]; }
check_healthcheck_executable_bit() { [ -x "$ROOT/scripts/orchestra_e2e_healthcheck.sh" ]; }
check_selftest_present() { [ -f "$ROOT/scripts/orchestra_e2e_selftest.sh" ]; }
check_test_healthcheck_present() { [ -f "$ROOT/scripts/test_healthcheck.sh" ]; }
check_readme_present() { [ -f "$ROOT/README.md" ]; }
check_no_crlf_line_endings() {
[ -d "$ROOT/scripts" ] || return 1
! grep -qU $'\r' "$ROOT"/scripts/*.sh "$ROOT/README.md" 2>/dev/null
}
check_no_tabs_in_scripts() {
[ -d "$ROOT/scripts" ] || return 1
! grep -q "$(printf '\t')" "$ROOT"/scripts/*.sh 2>/dev/null
}
# emit <format> <template> [args...]: the single output path.
# format: text or json print; none suppresses (--quiet). Explicit argument,
# never read from an enclosing variable.
emit() {
local format=$1
shift
[ "$format" = none ] || printf "$@"
}
main() {
local quiet=
local json=
for arg in "$@"; do
if [ "$arg" = --help ]; then
emit text 'Usage: %s [--quiet]\n\n' "${0##*/}"
emit text 'Healthcheck script for Orchestra E2E tests.\n'
emit text 'Exits 0 with a success message if all checks pass.\n'
emit text ' --quiet Suppress the success message; still exits 0.\n'
emit text 'Version: %s\n' "$VERSION"
exit 0
elif [ "$arg" = --quiet ]; then
quiet=1
elif [ "$arg" = --json ]; then
json=1
fi
done
local name
for name in $CHECKS; do
if "check_$name"; then
record "$name" ok
else
record "$name" fail
fi
done
local format=text
[ -n "$quiet" ] && format=none
[ -n "$json" ] && format=json
if [ "$FAILED" -gt 0 ]; then
local entry
for entry in $RESULTS; do
[ "${entry#*=}" = fail ] && emit "$format" 'FAIL - %s\n' "${entry%=*}"
done
exit 1
fi
if [ "$format" = json ]; then
emit "$format" '{"status":"ok","checks":%d}\n' "$TOTAL"
exit 0
fi
emit "$format" 'OK - all healthchecks passed\n'
exit 0
}
main "$@"