本项目使用 pre-commit hooks 来确保代码质量。在提交代码之前,会自动运行以下检查:
- Ruff Lint - 自动修复可修复的代码问题
- Ruff Format - 检查代码格式
- Ruff Check (严格模式) - 强制检查,不允许任何 lint 错误
- MyPy - Python 类型检查
- ESLint - JavaScript/TypeScript 代码检查
- 行尾空白检查
- 文件末尾换行检查
- YAML/JSON 格式检查
- 大文件检查
- 合并冲突检查
- 私钥检测
pre-commit 与后端 UV 环境绑定,不推荐全局安装 pre-commit。请使用项目提供的脚本一键安装。
curl -LsSf https://astral.sh/uv/install.sh | sh# 在项目根目录执行
./scripts/setup-pre-commit.sh
# 或: bash scripts/setup-pre-commit.sh该脚本会:在 backend 中执行 uv sync --dev(安装 pre-commit 等 dev 依赖)、uv run pre-commit install --install-hooks(安装 Git hooks,hook 将使用 backend 的 venv)。
# 使用后端 venv 运行所有 hooks 检查所有文件(在仓库根目录执行)
./scripts/run-pre-commit.sh
# 或
backend/.venv/bin/python -m pre_commit run --all-files
# 只运行特定 hook
backend/.venv/bin/python -m pre_commit run backend-ruff-check --all-files
backend/.venv/bin/python -m pre_commit run frontend-lint --all-files当你执行 git commit 时,pre-commit hooks 会自动运行:
git add .
git commit -m "your message"如果检查失败,提交会被阻止。你需要:
- 修复报告的错误
- 重新添加文件 (
git add .) - 再次提交
如果确实需要跳过 hooks(例如紧急修复),可以使用:
git commit --no-verify -m "emergency fix"注意: 跳过 hooks 会绕过代码质量检查,可能导致 CI 失败。
# 检查所有文件(在仓库根目录,使用 backend venv)
./scripts/run-pre-commit.sh
# 或 backend/.venv/bin/python -m pre_commit run --all-files
# 检查暂存的文件(在仓库根目录,需已通过 setup-pre-commit.sh 安装 hook)
pre-commit run
# 检查特定 hook
backend/.venv/bin/python -m pre_commit run ruff --all-files
backend/.venv/bin/python -m pre_commit run frontend-lint --all-files解决方案:
- 已改为使用 backend
.venv直接运行 pre-commit,不再用uv run,可避免 uv cache 权限问题。 - 若在 Cursor 内置终端仍报
os.sysconf等权限错误,请在本机系统终端(如 Terminal.app、iTerm)执行:./scripts/run-pre-commit.sh # 或 backend/.venv/bin/python -m pre_commit run --all-files
解决方案:
- 确保已安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh - 确保 backend 目录下有虚拟环境:
cd backend && uv venv - 确保已安装依赖:
cd backend && uv sync --dev
解决方案:
- 确保已安装 pnpm:
npm install -g pnpm - 确保 frontend 目录下已安装依赖:
cd frontend && pnpm install
解决方案:
- Hooks 默认只检查更改的文件
- 如果需要跳过某些检查,可以临时使用
--no-verify - 考虑优化检查配置,排除不需要检查的文件
解决方案:
- 确保本地环境与 CI 环境一致
- 运行
./scripts/run-pre-commit.sh或backend/.venv/bin/python -m pre_commit run --all-files检查所有文件 - 检查是否有未提交的修复
# 更新 hooks 到最新版本(在仓库根目录)
backend/.venv/bin/python -m pre_commit autoupdate
# 然后重新安装
backend/.venv/bin/python -m pre_commit install --install-hooks配置文件:.pre-commit-config.yaml
主要配置:
- 后端 Ruff Check: 使用
uv run ruff check .检查整个 backend 目录 - 前端 ESLint: 使用
pnpm run lint检查整个 frontend 目录 - 两个检查都设置为
always_run: false,只在相关文件更改时运行
- 提交前运行检查:在提交前运行
./scripts/run-pre-commit.sh或backend/.venv/bin/python -m pre_commit run --all-files确保所有检查通过 - 修复自动修复的问题:Ruff 会自动修复一些问题,记得重新添加修复后的文件
- 不要跳过 hooks:除非是真正的紧急情况
- 保持 hooks 更新:定期运行
pre-commit autoupdate更新 hooks
# 安装 hooks(推荐使用脚本)
./scripts/setup-pre-commit.sh
# 或仅安装 hooks(需已运行 uv sync --dev 于 backend)
backend/.venv/bin/python -m pre_commit install --install-hooks
# 卸载 hooks
backend/.venv/bin/python -m pre_commit uninstall
# 运行所有检查(在仓库根目录)
./scripts/run-pre-commit.sh
# 或 backend/.venv/bin/python -m pre_commit run --all-files
# 更新 hooks
backend/.venv/bin/python -m pre_commit autoupdate
# 清理缓存
backend/.venv/bin/python -m pre_commit clean