diff --git a/scripts/orchestra_e2e_healthcheck.sh b/scripts/orchestra_e2e_healthcheck.sh index f6fa7ee..262dd75 100755 --- a/scripts/orchestra_e2e_healthcheck.sh +++ b/scripts/orchestra_e2e_healthcheck.sh @@ -73,6 +73,35 @@ emit() { [ "$format" = none ] || printf "$@" } +# describe : the one-line description of a check. One case branch per +# name; this is the only place a description is written. +describe() { + case "$1" in + repo_root_readable) printf 'the repository root exists and is readable' ;; + scripts_dir_present) printf 'the scripts directory exists' ;; + healthcheck_executable_bit) printf 'this script is executable' ;; + selftest_present) printf 'the selftest script is present' ;; + test_healthcheck_present) printf 'the healthcheck test is present' ;; + readme_present) printf 'README.md is present' ;; + no_crlf_line_endings) printf 'no tracked text file uses CRLF endings' ;; + no_tabs_in_scripts) printf 'no script indents with tabs' ;; + shebang_is_bash) printf 'every script declares the bash shebang' ;; + usage_text_mentions_every_flag) printf 'the usage text lists every flag' ;; + esac +} + +# label : ': ', or bare '' while a name has no +# description yet. +label() { + local text + text=$(describe "$1") + if [ -n "$text" ]; then + printf '%s: %s' "$1" "$text" + else + printf '%s' "$1" + fi +} + # usage : the --help body. Also the source check_usage_text_mentions_every_flag # reads, so the flag list has exactly one home. usage() { @@ -89,7 +118,7 @@ usage() { emit "$1" '\nChecks:\n' local name for name in $CHECKS; do - emit "$1" ' %s\n' "$name" + emit "$1" ' %s\n' "$(label "$name")" done emit "$1" '\nVersion: %s\n' "$VERSION" } @@ -110,7 +139,7 @@ main() { elif [ "$arg" = --list-checks ]; then local listed for listed in $CHECKS; do - emit text '%s\n' "$listed" + emit text '%s\n' "$(label "$listed")" done exit 0 elif [ "$arg" = --quiet ]; then diff --git a/scripts/test_healthcheck.sh b/scripts/test_healthcheck.sh index 3b7cfea..e9cbedc 100755 --- a/scripts/test_healthcheck.sh +++ b/scripts/test_healthcheck.sh @@ -7,7 +7,19 @@ NAMES='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' -USAGE="$(printf 'Usage: orchestra_e2e_healthcheck.sh [--quiet] [--json] [--summary] [--timing] [--strict] [--list-checks]\n\nHealthcheck script for Orchestra E2E tests.\nExits 0 with a success message if all checks pass.\n --quiet Suppress the success message; still exits 0.\n --json Print a single-line JSON result; still exits 0.\n --help Print this usage text and exit 0.\n --summary Print one line per check before the success message.\n --timing Print elapsed milliseconds for the run.\n --strict Reject an unrecognised flag: exits 2.\n --list-checks Print the name of each check; exits 0.\n\nChecks:\n repo_root_readable\n scripts_dir_present\n healthcheck_executable_bit\n selftest_present\n test_healthcheck_present\n readme_present\n no_crlf_line_endings\n no_tabs_in_scripts\n shebang_is_bash\n usage_text_mentions_every_flag\n\nVersion: 1.0.0')" +LABELS='repo_root_readable: the repository root exists and is readable +scripts_dir_present: the scripts directory exists +healthcheck_executable_bit: this script is executable +selftest_present: the selftest script is present +test_healthcheck_present: the healthcheck test is present +readme_present: README.md is present +no_crlf_line_endings: no tracked text file uses CRLF endings +no_tabs_in_scripts: no script indents with tabs +shebang_is_bash: every script declares the bash shebang +usage_text_mentions_every_flag: the usage text lists every flag' +USAGE="$(printf 'Usage: orchestra_e2e_healthcheck.sh [--quiet] [--json] [--summary] [--timing] [--strict] [--list-checks]\n\nHealthcheck script for Orchestra E2E tests.\nExits 0 with a success message if all checks pass.\n --quiet Suppress the success message; still exits 0.\n --json Print a single-line JSON result; still exits 0.\n --help Print this usage text and exit 0.\n --summary Print one line per check before the success message.\n --timing Print elapsed milliseconds for the run.\n --strict Reject an unrecognised flag: exits 2.\n --list-checks Print the name of each check; exits 0.\n\nChecks:\n' + while IFS= read -r line; do printf ' %s\n' "$line"; done <<<"$LABELS" + printf '\nVersion: 1.0.0')" fails=0 check() { # check