#!/usr/bin/env bash # ============================================================================= # Linux Patch Manager — Pre-Commit Hook # ============================================================================= # Auto-formats Rust code and runs frontend checks before each commit. # Prevents CI format-check and lint failures by catching issues locally. # Install: ./scripts/git-hooks/install.sh # ============================================================================= set -euo pipefail REPO_ROOT="$(git rev-parse --show-toplevel)" # ── Rust auto-format ────────────────────────────────────────────────────────── if [[ -f "${REPO_ROOT}/Cargo.toml" ]]; then echo "[pre-commit] Running cargo fmt --all ..." cargo fmt --all --manifest-path "${REPO_ROOT}/Cargo.toml" 2>/dev/null # Re-stage any files that cargo fmt reformatted STAGED_RS=$(git diff --name-only --diff-filter=ACM -- '*.rs') if [[ -n "${STAGED_RS}" ]]; then git add ${STAGED_RS} fi fi # ── Frontend checks ────────────────────────────────────────────────────────── if [[ -f "${REPO_ROOT}/frontend/package.json" ]]; then echo "[pre-commit] Running ESLint ..." cd "${REPO_ROOT}/frontend" npx eslint src/ --ext .ts,.tsx --max-warnings 0 2>/dev/null echo "[pre-commit] Running TypeScript type check ..." npx tsc --noEmit 2>/dev/null fi echo "[pre-commit] All checks passed ✓"