diff --git a/TASK.md b/TASK.md index cb2bf31..c450007 100644 --- a/TASK.md +++ b/TASK.md @@ -1,14 +1,16 @@ -# Task 06G4JX6MSQEP7N0D5JWW9EP5X4 +# Task 06G4M6HF1Z3EREX1X3NEKSHP24 -Late handoff rig: add a --version line to the healthcheck usage text +Name the healthcheck success message once - Project: test-e2e -- Source: burnin/late-handoff-1 +- Source: burnin/run14-a - Priority: 0 ## Instructions -Add the version string to the usage text printed by scripts/orchestra_e2e_healthcheck.sh --help. Keep every existing line and exit status unchanged, and keep scripts/test_healthcheck.sh passing. +scripts/orchestra_e2e_healthcheck.sh spells its success message inline. Give it a single named constant beside the existing VERSION constant and use that constant everywhere the message is printed. + +Behaviour must not change. The plain run, --quiet and --help keep their current output and exit statuses, and scripts/test_healthcheck.sh keeps passing. ## Research first diff --git a/scripts/orchestra_e2e_healthcheck.sh b/scripts/orchestra_e2e_healthcheck.sh index f7b9a38..f6fa7ee 100755 --- a/scripts/orchestra_e2e_healthcheck.sh +++ b/scripts/orchestra_e2e_healthcheck.sh @@ -1,6 +1,68 @@ #!/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" + +# 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