C
ClaudeMastery
MODULESPATHASK AISOURCE

Learning Modules

10 modules · 11–13 hrs

Level Legend

Beginner
Beginner+
Intermediate
Intermediate+
Advanced
Home/Hooks/Pre-Commit Hook
Intermediate1 hourLesson 2 of 8View on GitHub

Pre-Commit Hook

#!/bin/bash
# Run tests before commit
# Hook: PreToolUse (matcher: Bash) - checks if the command is a git commit
# Note: There is no "PreCommit" hook event. Use PreToolUse with a Bash matcher
# and inspect the command to detect git commit operations.

echo "🧪 Running tests before commit..."

# Check if package.json exists (Node.js project)
if [ -f "package.json" ]; then
  if grep -q "\"test\":" package.json; then
    npm test
    if [ $? -ne 0 ]; then
      echo "❌ Tests failed! Commit blocked."
      exit 1
    fi
  fi
fi

# Check if pytest is available (Python project)
if [ -f "pytest.ini" ] || [ -f "setup.py" ]; then
  if command -v pytest &> /dev/null; then
    pytest
    if [ $? -ne 0 ]; then
      echo "❌ Tests failed! Commit blocked."
      exit 1
    fi
  fi
fi

# Check if go.mod exists (Go project)
if [ -f "go.mod" ]; then
  go test ./...
  if [ $? -ne 0 ]; then
    echo "❌ Tests failed! Commit blocked."
    exit 1
  fi
fi

# Check if Cargo.toml exists (Rust project)
if [ -f "Cargo.toml" ]; then
  cargo test
  if [ $? -ne 0 ]; then
    echo "❌ Tests failed! Commit blocked."
    exit 1
  fi
fi

echo "✅ All tests passed! Proceeding with commit."
exit 0

Previous
Overview
Next
Security Scan