pre-commit 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/env bash
  2. # pre-commit hook:检测到核心业务文件改动时自动跑核心业务测试。
  3. # 安装方法:./scripts/install-hooks.sh
  4. set -e
  5. REPO_ROOT="$(git rev-parse --show-toplevel)"
  6. cd "$REPO_ROOT"
  7. # 1) 拿到本次 commit 要包含的改动文件(已 staged)
  8. STAGED=$(git diff --cached --name-only --diff-filter=ACMR)
  9. if [ -z "$STAGED" ]; then
  10. exit 0
  11. fi
  12. # 2) 检查是否涉及核心业务文件
  13. CORE_PATTERN='(^|/)book-generator(/|$)|book-generator-api\.ts$|schema\.prisma$'
  14. CORE_HIT=$(echo "$STAGED" | grep -E "$CORE_PATTERN" || true)
  15. if [ -z "$CORE_HIT" ]; then
  16. echo "[pre-commit] 未检测到核心业务改动($STAGED),跳过核心业务测试。"
  17. exit 0
  18. fi
  19. echo "[pre-commit] 检测到核心业务改动:"
  20. echo "$CORE_HIT" | sed 's/^/ - /'
  21. echo
  22. # 3) 跑核心业务测试(best-effort:服务已起就直接跑,否则自动启)
  23. if [ -x "./scripts/run-core-business-test.sh" ]; then
  24. ./scripts/run-core-business-test.sh
  25. else
  26. echo "[pre-commit] 缺少 ./scripts/run-core-business-test.sh,跳过测试。"
  27. echo " 请阅读 CONTRIBUTING.md 后再提交。"
  28. exit 1
  29. fi