152 lines
4.4 KiB
Bash
Executable file
152 lines
4.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# verify.sh — Top-level roll-up for claude-design plugin verification
|
|
#
|
|
# Runs the 5 test scripts in dependency order:
|
|
# 1. tests/validate-plugin.sh (foundation plugin structure)
|
|
# 2. tests/test-skill-triggers.sh (skill description + trigger phrases)
|
|
# 3. tests/test-sc2-artifact-coverage.sh (SC2 — every preset has ≥1 file)
|
|
# 4. tests/test-sc3-citations.sh (SC3 — citation discipline)
|
|
# 5. tests/test-sc1-dogfood-log.sh (SC1 — operator dogfood log format)
|
|
#
|
|
# Flags:
|
|
# --strict pass --strict to test-sc1-dogfood-log.sh (missing block = FAIL)
|
|
# --quick skip tests/test-skill-triggers.sh (fast incremental runs)
|
|
#
|
|
# Exit codes: 0 = all sub-tests pass; non-zero = at least one sub-test failed
|
|
#
|
|
# Bash 3.2 compatible. Modelled on plugins/voyage/verify.sh helper style.
|
|
|
|
set -u
|
|
LC_ALL=en_US.UTF-8
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m'
|
|
|
|
PLUGIN_ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
# Flag parsing
|
|
STRICT=false
|
|
QUICK=false
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--strict) STRICT=true ;;
|
|
--quick) QUICK=true ;;
|
|
-h|--help)
|
|
echo "Usage: $0 [--strict] [--quick]"
|
|
echo " --strict Pass --strict to test-sc1-dogfood-log.sh"
|
|
echo " --quick Skip tests/test-skill-triggers.sh"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown flag: $arg" >&2
|
|
echo "Usage: $0 [--strict] [--quick]" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
TOTAL_PASS=0
|
|
TOTAL_FAIL=0
|
|
TOTAL_WARN=0
|
|
FAILED_SCRIPTS=""
|
|
|
|
run_script() {
|
|
local script_name="$1"
|
|
shift
|
|
local script_path="$PLUGIN_ROOT/tests/$script_name"
|
|
|
|
if [ ! -f "$script_path" ]; then
|
|
printf "${RED}[MISSING]${NC} %s\n" "$script_name"
|
|
TOTAL_FAIL=$((TOTAL_FAIL + 1))
|
|
FAILED_SCRIPTS="$FAILED_SCRIPTS $script_name"
|
|
return 1
|
|
fi
|
|
|
|
printf "${BOLD}### %s${NC}\n" "$script_name"
|
|
|
|
local output exit_code
|
|
output="$(bash "$script_path" "$@" 2>&1)"
|
|
exit_code=$?
|
|
|
|
printf '%s\n' "$output"
|
|
|
|
# Parse the script's own Summary line: "Pass: N Fail: N Warn: N"
|
|
local summary
|
|
summary="$(printf '%s\n' "$output" | grep -E '^Pass: [0-9]+ Fail: [0-9]+ Warn: [0-9]+$' | tail -n 1)"
|
|
|
|
if [ -n "$summary" ]; then
|
|
local p f w
|
|
p="$(printf '%s' "$summary" | awk '{print $2}')"
|
|
f="$(printf '%s' "$summary" | awk '{print $4}')"
|
|
w="$(printf '%s' "$summary" | awk '{print $6}')"
|
|
TOTAL_PASS=$((TOTAL_PASS + p))
|
|
TOTAL_FAIL=$((TOTAL_FAIL + f))
|
|
TOTAL_WARN=$((TOTAL_WARN + w))
|
|
fi
|
|
|
|
if [ "$exit_code" -ne 0 ]; then
|
|
FAILED_SCRIPTS="$FAILED_SCRIPTS $script_name"
|
|
fi
|
|
|
|
printf "\n"
|
|
return "$exit_code"
|
|
}
|
|
|
|
echo "=== claude-design verify.sh ==="
|
|
echo "Plugin root: $PLUGIN_ROOT"
|
|
echo "Strict mode: $STRICT Quick mode: $QUICK"
|
|
echo ""
|
|
|
|
# -------------------------------------------------------
|
|
# 1. validate-plugin.sh
|
|
# -------------------------------------------------------
|
|
run_script "validate-plugin.sh" || true
|
|
|
|
# -------------------------------------------------------
|
|
# 2. test-skill-triggers.sh (skipped in --quick mode)
|
|
# -------------------------------------------------------
|
|
if $QUICK; then
|
|
printf "${YELLOW}### test-skill-triggers.sh${NC} (skipped — --quick)\n\n"
|
|
else
|
|
run_script "test-skill-triggers.sh" || true
|
|
fi
|
|
|
|
# -------------------------------------------------------
|
|
# 3. test-sc2-artifact-coverage.sh
|
|
# -------------------------------------------------------
|
|
run_script "test-sc2-artifact-coverage.sh" || true
|
|
|
|
# -------------------------------------------------------
|
|
# 4. test-sc3-citations.sh
|
|
# -------------------------------------------------------
|
|
run_script "test-sc3-citations.sh" || true
|
|
|
|
# -------------------------------------------------------
|
|
# 5. test-sc1-dogfood-log.sh (strict if --strict)
|
|
# -------------------------------------------------------
|
|
if $STRICT; then
|
|
run_script "test-sc1-dogfood-log.sh" --strict || true
|
|
else
|
|
run_script "test-sc1-dogfood-log.sh" || true
|
|
fi
|
|
|
|
# -------------------------------------------------------
|
|
# Aggregate summary
|
|
# -------------------------------------------------------
|
|
echo "================================================="
|
|
echo "=== claude-design verify.sh — aggregate summary"
|
|
echo "================================================="
|
|
printf "${GREEN}Pass:${NC} %d ${RED}Fail:${NC} %d ${YELLOW}Warn:${NC} %d\n" \
|
|
"$TOTAL_PASS" "$TOTAL_FAIL" "$TOTAL_WARN"
|
|
|
|
if [ -n "$FAILED_SCRIPTS" ]; then
|
|
printf "${RED}Failed scripts:${NC}%s\n" "$FAILED_SCRIPTS"
|
|
fi
|
|
|
|
if [ "$TOTAL_FAIL" -gt 0 ]; then
|
|
exit 1
|
|
fi
|
|
exit 0
|