ig-v1 / scripts /install-hooks.sh
harshith99's picture
Hooks: add pre-commit docs guard for git and Claude Code
95d4e02
Raw
History Blame Contribute Delete
2.38 kB
#!/bin/sh
# Install git hook and Claude Code hook for this repo.
# Run once after cloning: sh scripts/install-hooks.sh
set -e
REPO_ROOT=$(git rev-parse --show-toplevel)
# ── Git pre-commit hook ────────────────────────────────────────────────────
HOOK_DST="$REPO_ROOT/.git/hooks/pre-commit"
cp "$REPO_ROOT/scripts/hook-pre-commit-docs.sh" "$HOOK_DST"
chmod +x "$HOOK_DST"
echo "βœ“ git pre-commit hook installed β†’ .git/hooks/pre-commit"
# ── Claude Code PreToolUse hook ────────────────────────────────────────────
CLAUDE_DIR="$REPO_ROOT/.claude"
CLAUDE_HOOKS="$CLAUDE_DIR/hooks"
CLAUDE_SETTINGS="$CLAUDE_DIR/settings.json"
mkdir -p "$CLAUDE_HOOKS"
# Copy the hook script into .claude/hooks/
cp "$REPO_ROOT/scripts/hook-pre-commit-docs.sh" "$CLAUDE_HOOKS/pre-commit-docs-check.sh"
chmod +x "$CLAUDE_HOOKS/pre-commit-docs-check.sh"
# Merge the hook entry into .claude/settings.json
if [ -f "$CLAUDE_SETTINGS" ]; then
# Add hooks key if not already present using Python
python3 - "$CLAUDE_SETTINGS" <<'PYEOF'
import sys, json
path = sys.argv[1]
with open(path) as f:
cfg = json.load(f)
hook_entry = {
"type": "command",
"command": "bash .claude/hooks/pre-commit-docs-check.sh"
}
hooks = cfg.setdefault("hooks", {})
pre = hooks.setdefault("PreToolUse", [])
# Find or create Bash matcher
bash_matchers = [m for m in pre if m.get("matcher") == "Bash"]
if bash_matchers:
existing = bash_matchers[0].setdefault("hooks", [])
cmds = [h.get("command") for h in existing]
if hook_entry["command"] not in cmds:
existing.append(hook_entry)
else:
pre.append({"matcher": "Bash", "hooks": [hook_entry]})
with open(path, "w") as f:
json.dump(cfg, f, indent=2)
f.write("\n")
print("βœ“ Claude Code PreToolUse hook registered β†’ .claude/settings.json")
PYEOF
else
cat > "$CLAUDE_SETTINGS" <<JSON
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/pre-commit-docs-check.sh"
}
]
}
]
}
}
JSON
echo "βœ“ Claude Code PreToolUse hook registered β†’ .claude/settings.json (created)"
fi