Files

32 lines
2.0 KiB
Bash

#!/usr/bin/env bash
# Справка `kit help` обязана перечислять все команды: авторские (их берём прямо из диспетчера
# scripts/kit.sh) и наши. Если автор добавит команду, а мы забудем про справку — проверка упадёт,
# и сборка релиза остановится: так справка не отстанет молча.
set -Eeuo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
help=$(awk '/^kit_help_all\(\) \{/,/^\}/' scripts/kit-local.sh)
[[ -n $help ]] || { echo "✗ не нашёл kit_help_all в scripts/kit-local.sh" >&2; exit 1; }
bad=0
# 1) авторские команды: первое слово каждой ветки диспетчера kit.sh
while read -r word; do
[[ -n $word ]] || continue
case $word in __* | local | help | -h | --help | -v | --version) continue ;; esac
# «user off» в справке может стоять как «user on|off» — поэтому пробел допускаем и как разделитель вариантов
pat=${word// /[ |]}
grep -qE " kit ${pat}" <<<"$help" || { echo " ✗ в справке нет авторской команды: kit $word" >&2; bad=1; }
done < <(grep -oE '^ +"[a-z][a-z0-9 -]*"\)|^ +"[a-z][a-z0-9 -]*" \*\)' scripts/kit.sh | sed 's/)$//' | tr -d '"' | sed 's/^ *//' | sort -u)
# 2) наши команды из ветки kit_local_cmd
while read -r word; do
[[ -n $word ]] || continue
grep -qF " kit local $word" <<<"$help" || { echo " ✗ в справке нет нашей команды: kit local $word" >&2; bad=1; }
done < <(awk '/^kit_local_cmd\(\) \{/,/^\}/' scripts/kit-local.sh | grep -oE '^ [a-z-]+' | tr -d ' ' | sort -u)
if (( bad )); then
echo "✗ справка kit help отстала от набора команд — поправьте kit_help_all в scripts/kit-local.sh" >&2
exit 1
fi
echo " ✓ справка kit help содержит все команды (авторские и наши)"