45 lines
1.2 KiB
Bash
Executable File
45 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(git rev-parse --show-toplevel)"
|
|
cd "$ROOT_DIR"
|
|
|
|
if ! command -v pnpm >/dev/null 2>&1; then
|
|
echo "❌ pnpm is required for pre-commit checks."
|
|
exit 1
|
|
fi
|
|
|
|
echo "[pre-commit] Running lint-staged for JS/TS files..."
|
|
pnpm exec lint-staged
|
|
|
|
RUST_FILES="$(git diff --cached --name-only --diff-filter=ACMR | grep -E '^src-tauri/.*\.rs$' || true)"
|
|
if [ -n "$RUST_FILES" ]; then
|
|
echo "[pre-commit] Formatting Rust changes with cargo fmt..."
|
|
(
|
|
cd src-tauri
|
|
cargo fmt
|
|
)
|
|
while IFS= read -r file; do
|
|
[ -n "$file" ] && git add "$file"
|
|
done <<< "$RUST_FILES"
|
|
|
|
echo "[pre-commit] Linting Rust changes with cargo clippy..."
|
|
(
|
|
cd src-tauri
|
|
cargo clippy-all
|
|
if ! command -v clash-verge-logging-check >/dev/null 2>&1; then
|
|
echo "[pre-commit] Installing clash-verge-logging-check..."
|
|
cargo install --git https://github.com/clash-verge-rev/clash-verge-logging-check.git
|
|
fi
|
|
clash-verge-logging-check
|
|
)
|
|
fi
|
|
|
|
TS_FILES="$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.(ts|tsx)$' || true)"
|
|
if [ -n "$TS_FILES" ]; then
|
|
echo "[pre-commit] Running TypeScript type check..."
|
|
pnpm typecheck
|
|
fi
|
|
|
|
echo "[pre-commit] All checks completed successfully."
|