网络 SDK 包含中间生成代码,更新脚本,升级版本号,隔离 pre-commit 脚本范围

This commit is contained in:
Cody
2026-03-10 19:22:58 +08:00
parent 890e102543
commit db8d269944
7 changed files with 1294 additions and 226 deletions

View File

@@ -1,5 +1,7 @@
#!/bin/bash
# Git pre-commit hook提交前自动 formatanalyze 有 error 则拦截提交
# Git pre-commit hookanalyze 有 error / warning 则拦截提交
#
# 只分析包含暂存 .dart 文件的包,不跑全局 analyze避免其他包的错误阻断无关提交。
#
# 安装bash scripts/setup.shsetup.sh 自动把本文件复制到 .git/hooks/pre-commit
# 手动安装cp scripts/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
@@ -24,35 +26,60 @@ LOCK_STAGED=$(git diff --cached --name-only pubspec.lock 2>/dev/null || true)
if [[ -n "$LOCK_UNSTAGED" && -z "$LOCK_STAGED" ]]; then
git checkout HEAD -- pubspec.lock
echo "[pre-commit] pubspec.lock was auto-modified by flutter, restored to HEAD."
echo " To intentionally update: run 'dart pub get' or 'dart pub upgrade',"
echo " To intentionally update: run 'flutter pub get' or 'flutter pub upgrade',"
echo " then 'git add pubspec.lock' before committing."
fi
# ── dart format + analyze ────────────────────────────────────────────────────
# ── dart analyze只分析涉及的包────────────────────────────────────────────
STAGED_DART=$(git diff --cached --name-only --diff-filter=ACM | grep '\.dart$' || true)
if [[ -z "$STAGED_DART" ]]; then
exit 0
fi
echo "[pre-commit] formatting staged dart files..."
echo "$STAGED_DART" | xargs dart format --line-length=80
echo "$STAGED_DART" | xargs git add
# 找到每个暂存 .dart 文件所在的包根目录(最近的 pubspec.yaml 所在目录)
PKG_DIRS_LIST=()
while IFS= read -r file; do
dir="$ROOT_DIR/$(dirname "$file")"
while [[ "$dir" != "$ROOT_DIR" && "$dir" != "/" ]]; do
if [[ -f "$dir/pubspec.yaml" ]]; then
PKG_DIRS_LIST+=("$dir")
break
fi
dir="$(dirname "$dir")"
done
done <<< "$STAGED_DART"
echo "[pre-commit] running dart analyze..."
cd "$ROOT_DIR"
ANALYZE_OUTPUT=$(dart analyze 2>&1)
if echo "$ANALYZE_OUTPUT" | grep -q "^ error"; then
echo "[pre-commit] dart analyze found errors, commit blocked."
echo "$ANALYZE_OUTPUT" | grep "^ error"
exit 1
if [[ ${#PKG_DIRS_LIST[@]} -eq 0 ]]; then
exit 0
fi
if echo "$ANALYZE_OUTPUT" | grep -q "^ warning"; then
echo "[pre-commit] dart analyze found warnings, commit blocked."
echo "$ANALYZE_OUTPUT" | grep "^ warning"
# 去重
UNIQUE_PKGS=$(printf '%s\n' "${PKG_DIRS_LIST[@]}" | sort -u)
echo "[pre-commit] running dart analyze on affected packages..."
FAILED=0
while IFS= read -r pkg_dir; do
pkg_name="$(basename "$pkg_dir")"
echo "[pre-commit] → $pkg_name"
ANALYZE_OUTPUT=$(dart analyze "$pkg_dir" 2>&1)
if echo "$ANALYZE_OUTPUT" | grep -q "^ error"; then
echo "[pre-commit] errors in $pkg_name:"
echo "$ANALYZE_OUTPUT" | grep "^ error"
FAILED=1
fi
if echo "$ANALYZE_OUTPUT" | grep -q "^ warning"; then
echo "[pre-commit] warnings in $pkg_name:"
echo "$ANALYZE_OUTPUT" | grep "^ warning"
FAILED=1
fi
done <<< "$UNIQUE_PKGS"
if [[ $FAILED -eq 1 ]]; then
echo "[pre-commit] commit blocked due to errors/warnings above."
exit 1
fi