#!/usr/bin/env bash readonly VERSION=1.0.0 readonly SUCCESS_MESSAGE='OK - all healthchecks passed' readonly ROOT=$(cd "$(dirname "$0")/.." && pwd) # Space-separated check names; each has a check_ 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 shebang_is_bash usage_text_mentions_every_flag" # check_exists : true when is one of the CHECKS names. check_exists() { case " $(printf '%s ' $CHECKS) " in *" $1 "*) return 0 ;; esac return 1 } # name=ok / name=fail pairs, in run order. RESULTS= FAILED=0 TOTAL=0 # record : 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 } check_shebang_is_bash() { [ -d "$ROOT/scripts" ] || return 1 local f for f in "$ROOT"/scripts/*.sh; do [ "$(head -n 1 "$f")" = '#!/usr/bin/env bash' ] || return 1 done } check_usage_text_mentions_every_flag() { local text flag text=$(usage text) for flag in --quiet --json --help; do case "$text" in *"$flag"*) ;; *) return 1 ;; esac done } # now_us: current time in microseconds. Strips any locale decimal separator. now_us() { printf '%s' "${EPOCHREALTIME//[!0-9]/}"; } # elapsed_ms : whole milliseconds since . elapsed_ms() { printf '%s' "$(( ($(now_us) - $1) / 1000 ))"; } # emit