Back to skills
Git Hooks Manager
Setup and manage git hooks for pre-commit, pre-push automation (lint, test, format)
3 stars
0 votes
0 copies
0 views
Added 12/19/2025
toolstypescriptpythonrustbashnodegitapiperformance
Works with
api
Install via CLI
$
openskills install GLINCKER/claude-code-marketplaceFiles
SKILL.md
---
name: git-hooks-manager
description: Setup and manage git hooks for pre-commit, pre-push automation (lint, test, format)
allowed-tools: ["Write", "Read", "Bash"]
version: 1.0.0
author: GLINCKER Team
license: Apache-2.0
keywords: [git, hooks, pre-commit, automation, quality]
---
# Git Hooks Manager
Setup automated git hooks for pre-commit and pre-push workflows. Enforce code quality, run tests, format code, and prevent bad commits from reaching your repository.
## What This Skill Does
- Creates pre-commit hooks (lint, format, test)
- Sets up pre-push hooks (full test suite)
- Installs commit-msg hooks (enforce conventions)
- Configures husky or manual hooks
- Prevents commits with failing checks
- Auto-formats code before commit
## Instructions
### Phase 1: Detect Project Type
```bash
Use Read to check:
- package.json → Node.js (use husky)
- pyproject.toml → Python (use pre-commit)
- .git/hooks → Manual hooks
```
### Phase 2: Node.js Setup (Husky)
**Install husky**:
```bash
npm install --save-dev husky lint-staged
npx husky init
```
**Configure package.json**:
```json
{
"scripts": {
"prepare": "husky"
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml}": [
"prettier --write"
]
}
}
```
**Pre-commit hook (.husky/pre-commit)**:
```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "🔍 Running pre-commit checks..."
# Run linter
npm run lint || exit 1
# Format code
npx lint-staged || exit 1
# Run tests on staged files
npm test -- --findRelatedTests $(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(js|jsx|ts|tsx)$' | tr '\n' ' ') || exit 1
echo "✅ Pre-commit checks passed!"
```
**Pre-push hook (.husky/pre-push)**:
```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "🔍 Running pre-push checks..."
# Run full test suite
npm test || exit 1
# Check types (if TypeScript)
npm run type-check || exit 1
# Build check
npm run build || exit 1
echo "✅ Pre-push checks passed!"
```
**Commit-msg hook (.husky/commit-msg)**:
```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# Enforce conventional commits
npx --no -- commitlint --edit $1 || exit 1
```
### Phase 3: Python Setup (pre-commit)
**.pre-commit-config.yaml**:
```yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- id: check-json
- id: check-merge-conflict
- id: detect-private-key
- repo: https://github.com/psf/black
rev: 23.12.1
hooks:
- id: black
language_version: python3.11
- repo: https://github.com/pycqa/flake8
rev: 7.0.0
hooks:
- id: flake8
args: ['--max-line-length=88', '--extend-ignore=E203']
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
- id: isort
args: ['--profile', 'black']
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
hooks:
- id: mypy
additional_dependencies: [types-all]
- repo: local
hooks:
- id: pytest
name: pytest
entry: pytest
language: system
pass_filenames: false
always_run: true
```
**Install**:
```bash
pip install pre-commit
pre-commit install
pre-commit install --hook-type commit-msg
```
### Phase 4: Manual Hooks
For projects without package managers:
**.git/hooks/pre-commit**:
```bash
#!/bin/sh
echo "🔍 Running pre-commit checks..."
# Check for TODOs
if git diff --cached | grep -i "TODO"; then
echo "❌ Found TODO comments. Please remove or track them properly."
exit 1
fi
# Check for console.log
if git diff --cached --name-only | grep -E '\.(js|jsx|ts|tsx)$' | xargs grep -n "console\.log"; then
echo "❌ Found console.log statements. Please remove them."
exit 1
fi
# Check for hardcoded secrets
if git diff --cached | grep -E '(password|secret|api_key|apikey)\s*=\s*["\'][^"\']+["\']'; then
echo "❌ Possible hardcoded secret detected!"
exit 1
fi
# Check file size
for file in $(git diff --cached --name-only); do
if [ -f "$file" ]; then
size=$(wc -c < "$file")
if [ $size -gt 1048576 ]; then # 1MB
echo "❌ File $file is too large (>1MB)"
exit 1
fi
fi
done
echo "✅ Pre-commit checks passed!"
```
## Hook Types
### pre-commit
- Linting (ESLint, Flake8, Pylint)
- Formatting (Prettier, Black, rustfmt)
- Type checking (TypeScript, mypy)
- Unit tests on changed files
- Secret detection
### pre-push
- Full test suite
- Build verification
- Coverage check
- Integration tests
### commit-msg
- Conventional Commits enforcement
- Ticket number requirement
- Message length validation
### post-commit
- Notifications
- Log generation
- Cleanup tasks
## Advanced Features
### Skip Hooks (When Needed)
```bash
# Skip pre-commit
git commit -n -m "Emergency fix"
# Skip pre-push
git push --no-verify
```
### Selective Hooks
```yaml
# Only run on specific branches
if [ "$(git branch --show-current)" = "main" ]; then
echo "Running extra checks on main branch..."
fi
```
### Performance Optimization
```bash
# Cache linter results
if [ ! -f .lint-cache ] || [ "$(git diff --cached | md5sum)" != "$(cat .lint-cache)" ]; then
npm run lint
git diff --cached | md5sum > .lint-cache
fi
```
## Tool Requirements
- **Write**: Create hook files
- **Read**: Detect project configuration
- **Bash**: Make hooks executable
## Examples
### Example 1: Full Setup
**User**: "Setup git hooks for my Node.js project"
**Output**:
- Installs husky + lint-staged
- Creates pre-commit hook (lint, format, test)
- Creates pre-push hook (full tests)
- Creates commit-msg hook (conventional commits)
### Example 2: Python Project
**User**: "Setup pre-commit hooks for Python"
**Output**:
- Installs pre-commit framework
- Configures black, flake8, isort, mypy
- Adds pytest hook
- Installs hooks to .git/hooks/
## Best Practices
1. **Fast pre-commit**: Only run on changed files
2. **Comprehensive pre-push**: Full test suite before push
3. **Allow skip**: Provide --no-verify escape hatch
4. **Team consistency**: Commit hooks config to repo
5. **Clear feedback**: Show what's running and why it failed
## Changelog
### Version 1.0.0
- Husky setup for Node.js
- pre-commit framework for Python
- Manual hooks for any project
- Conventional Commits enforcement
- Secret detection
## Author
**GLINCKER Team**
- Repository: [claude-code-marketplace](https://github.com/GLINCKER/claude-code-marketplace)
Attribution
Comments (0)
No comments yet. Be the first to comment!
