openpencil/.githooks/pre-commit
2026-05-24 17:44:42 +08:00

41 lines
1.1 KiB
Bash
Executable file

#!/bin/sh
#
# Pre-commit hook: read version from branch name (e.g. v0.5.0)
# and sync to all package.json files
#
BRANCH=$(git rev-parse --abbrev-ref HEAD)
# Extract version from branch name like v0.5.0, v1.2.3, release/v2.0.0
VERSION=$(echo "$BRANCH" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || true)
if [ -n "$VERSION" ]; then
CHANGED=0
for f in package.json apps/*/package.json packages/*/package.json; do
if [ -f "$f" ]; then
CURRENT=$(jq -r '.version' "$f")
if [ "$CURRENT" != "$VERSION" ]; then
jq --arg v "$VERSION" '.version=$v' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
git add "$f"
CHANGED=1
fi
fi
done
if [ "$CHANGED" = "1" ]; then
echo "[version-sync] branch $BRANCH$VERSION"
fi
fi
# --- Rust format + lint gates (same checks as CI) ---
echo "[pre-commit] checking Rust format"
if ! cargo fmt --all -- --check; then
echo "[pre-commit] Rust format check failed. Run: cargo fmt --all"
exit 1
fi
echo "[pre-commit] running Rust clippy"
if ! cargo clippy --workspace --all-targets -- -D warnings; then
echo "[pre-commit] Rust clippy failed. Fix warnings before committing."
exit 1
fi