#!/bin/bash # Agent代码提交前自动格式化+质量检查脚本 # 用法: scripts/agent-commit.sh [files...] # 效果: 自动跑black+isort+ruff check,通过后才commit+push set -e if [ $# -lt 1 ]; then echo "用法: $0 [file1 file2 ...]" echo "示例: $0 \"feat: add new api\" apps/api/src/" exit 1 fi COMMIT_MSG="$1" shift TARGETS="${@:-.}" cd "$(dirname "$0")/.." REPO_ROOT=$(pwd) echo "仓库根目录: $REPO_ROOT" echo "提交信息: $COMMIT_MSG" echo "目标路径: $TARGETS" echo "" # 后端代码格式化(Python文件) PYTHON_FILES=$(find $TARGETS -name "*.py" -type f 2>/dev/null | head -100 || true) if [ -n "$PYTHON_FILES" ]; then echo "=== Step 1/4: 后端代码格式化 (black) ===" if command -v black &> /dev/null; then black $TARGETS 2>&1 | tail -3 echo "✅ black 完成" else echo "⚠️ 未安装black,跳过" fi echo "" echo "=== Step 2/4: import排序 (isort) ===" if command -v isort &> /dev/null; then isort $TARGETS 2>&1 | tail -3 echo "✅ isort 完成" else echo "⚠️ 未安装isort,跳过" fi echo "" echo "=== Step 3/4: 代码质量检查 (ruff check) ===" if command -v ruff &> /dev/null; then RUFF_OUTPUT=$(ruff check $TARGETS 2>&1) || true RUFF_ERRORS=$(echo "$RUFF_OUTPUT" | grep -c "^" || echo 0) if [ "$RUFF_ERRORS" -le 2 ] || echo "$RUFF_OUTPUT" | grep -q "All checks passed"; then echo "✅ ruff 检查通过(错误数: $RUFF_ERRORS)" else echo "❌ ruff 发现以下问题:" echo "$RUFF_OUTPUT" | head -30 echo "" echo "请修复后重新提交,或手动忽略特定问题" exit 1 fi else echo "⚠️ 未安装ruff,跳过" fi echo "" else echo "ℹ️ 未检测到Python文件,跳过后端格式化" echo "" fi # 前端代码格式化(TS/TSX文件) TS_FILES=$(find $TARGETS -name "*.ts" -o -name "*.tsx" -type f 2>/dev/null | head -100 || true) if [ -n "$TS_FILES" ] && [ -f "apps/web/package.json" ]; then echo "=== Step 4/4: 前端代码格式化 (prettier) ===" if command -v npx &> /dev/null; then cd apps/web && npx prettier --write "src/**/*.{ts,tsx}" 2>&1 | tail -3 || true cd "$REPO_ROOT" echo "✅ prettier 完成" else echo "⚠️ 未安装npx,跳过前端格式化" fi echo "" fi # Git操作 echo "=== 提交代码 ===" git add -A git diff --cached --stat echo "" git commit -m "$COMMIT_MSG" echo "" echo "✅ 本地提交完成" # 可选:自动推送 if [ "$AGENT_AUTO_PUSH" = "true" ]; then echo "正在推送到远程..." git push echo "✅ 推送完成" else echo "ℹ️ 本地已提交,如需推送执行: git push" echo " 设置 AGENT_AUTO_PUSH=true 可自动推送" fi