Files
waoowaoo/scripts/guards/task-status-cutover-audit.sh

101 lines
2.4 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(git rev-parse --show-toplevel)"
cd "$ROOT_DIR"
FAILED=0
print_header() {
echo
echo "============================================================"
echo "$1"
echo "============================================================"
}
print_ok() {
echo "[PASS] $1"
}
print_fail() {
echo "[FAIL] $1"
}
run_zero_match_check() {
local title="$1"
local pattern="$2"
shift 2
local paths=("$@")
local output
output="$(git grep -n -E "$pattern" -- "${paths[@]}" || true)"
if [[ -z "$output" ]]; then
print_ok "$title"
else
print_fail "$title"
echo "$output"
FAILED=1
fi
}
run_usetasktargetstates_check() {
local title="useTaskTargetStates 仅允许在 useProjectAssets/useGlobalAssets 中使用"
local output
output="$(git grep -n "useTaskTargetStates" -- src || true)"
if [[ -z "$output" ]]; then
print_ok "$title (当前 0 命中)"
return
fi
local filtered
filtered="$(echo "$output" | grep -v "src/lib/query/hooks/useProjectAssets.ts" | grep -v "src/lib/query/hooks/useGlobalAssets.ts" || true)"
if [[ -z "$filtered" ]]; then
print_ok "$title"
else
print_fail "$title"
echo "$filtered"
FAILED=1
fi
}
print_header "Task Status Cutover Audit"
run_zero_match_check \
"禁止 useTaskHandoff" \
"useTaskHandoff" \
src
run_zero_match_check \
"禁止 manualRegeneratingItems/setRegeneratingItems/clearRegeneratingItem" \
"manualRegeneratingItems|setRegeneratingItems|clearRegeneratingItem" \
src
run_zero_match_check \
"禁止业务层直接判断 status ===/!== cancelled" \
"status\\s*===\\s*['\\\"]cancelled['\\\"]|status\\s*!==\\s*['\\\"]cancelled['\\\"]" \
src
run_zero_match_check \
"禁止 generatingImage/generatingVideo/generatingLipSync 字段" \
"\\bgeneratingImage\\b|\\bgeneratingVideo\\b|\\bgeneratingLipSync\\b" \
src
run_usetasktargetstates_check
run_zero_match_check \
"禁止 novel-promotion/asset-hub/shared-assets 中 useState(false) 作为生成态命名" \
"const \\[[^\\]]*(Generating|Regenerating|WaitingForGeneration|AnalyzingAssets|GeneratingAll|CopyingFromGlobal)[^\\]]*\\]\\s*=\\s*useState\\(false\\)" \
"src/app/[locale]/workspace/[projectId]/modes/novel-promotion" \
"src/app/[locale]/workspace/asset-hub" \
"src/components/shared/assets"
print_header "Audit Result"
if [[ "$FAILED" -eq 0 ]]; then
echo "All checks passed."
exit 0
fi
echo "Audit failed. Please fix findings above."
exit 1