📝 docs: add ADR for staged-only Git hooks formatting
- Add ADR-0012 documenting the decision to format only staged Go files - Update ADR README.md with new entry - Document rationale, alternatives, and verification results - Include future considerations for monitoring and CI/CD integration Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
---
|
||||
name: commit_message
|
||||
description: Helps create proper Gitmoji commit messages following the Common Gitmoji Reference from AGENTS.md. Use when creating commits to ensure consistent, visual commit messages.
|
||||
description: Helps create proper Gitmoji commit messages following the Common Gitmoji Reference from AGENTS.md. Use when creating commits to ensure consistent, visual commit messages. Includes Git hooks for automatic code formatting and dependency management.
|
||||
license: MIT
|
||||
metadata:
|
||||
author: DanceLessonsCoach Team
|
||||
version: "1.0.0"
|
||||
version: "1.1.0"
|
||||
based-on: AGENTS.md Common Gitmoji Reference
|
||||
---
|
||||
|
||||
# Commit Message Skill
|
||||
|
||||
This skill helps create proper Gitmoji commit messages following the Common Gitmoji Reference from AGENTS.md.
|
||||
This skill helps create proper Gitmoji commit messages following the Common Gitmoji Reference from AGENTS.md. It also includes Git hooks for automatic code formatting and dependency management.
|
||||
|
||||
## Gitmoji Reference
|
||||
|
||||
@@ -80,6 +80,37 @@ git commit -m "🔧 chore: add log output file configuration"
|
||||
git commit -m "🔧 chore: update build system scripts"
|
||||
```
|
||||
|
||||
## Git Hooks for Code Quality
|
||||
|
||||
The project includes Git hooks that automatically run before commits to ensure code quality:
|
||||
|
||||
### Pre-commit Hook
|
||||
- **Location**: `.git/hooks/pre-commit`
|
||||
- **Automatically runs**:
|
||||
- `go mod tidy` - Cleans up and organizes Go dependencies
|
||||
- `go fmt` - Formats all Go code according to standards
|
||||
- Auto-adds modified files to the commit
|
||||
|
||||
### How It Works
|
||||
|
||||
```bash
|
||||
# When you commit:
|
||||
git add .
|
||||
git commit -m "✨ feat: add new feature"
|
||||
|
||||
# The hook automatically:
|
||||
1. Runs `go mod tidy`
|
||||
2. Runs `go fmt` on all Go files
|
||||
3. Adds any modified files to your commit
|
||||
4. Allows commit if successful
|
||||
```
|
||||
|
||||
### Benefits
|
||||
- Ensures consistent code formatting
|
||||
- Maintains clean dependency management
|
||||
- Prevents common Go code issues
|
||||
- Runs automatically - no manual steps needed
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Commit Message Structure
|
||||
@@ -146,11 +177,84 @@ echo "$commit_message" | grep -E "^[🎨✨🐛📝🔧♻️🚀🔒📦🔥
|
||||
| Missing colon | No colon after type | Add colon: `feat:` not `feat` |
|
||||
| Long first line | First line > 50 chars | Keep first line concise, add details in body |
|
||||
|
||||
## Git Hooks Reference
|
||||
|
||||
### Hook Location
|
||||
```bash
|
||||
.git/hooks/pre-commit
|
||||
```
|
||||
|
||||
### Hook Content
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
# DanceLessonsCoach pre-commit hook
|
||||
# Runs go mod tidy and go fmt before allowing commits
|
||||
|
||||
echo "Running pre-commit hooks..."
|
||||
|
||||
# Check if we're in a Go project
|
||||
if [ ! -f "go.mod" ]; then
|
||||
echo "Not a Go project, skipping hooks"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Run go mod tidy
|
||||
echo "Running go mod tidy..."
|
||||
go mod tidy
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: go mod tidy failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if go.mod or go.sum were modified
|
||||
if git diff --cached --name-only | grep -qE '(go\.mod|go\.sum)'; then
|
||||
echo "go.mod or go.sum changed, adding to commit..."
|
||||
git add go.mod go.sum
|
||||
fi
|
||||
|
||||
# Run go fmt on all Go files
|
||||
echo "Running go fmt..."
|
||||
GOFILES=$(find . -name '*.go' -not -path "./vendor/*" -not -path "./.git/*")
|
||||
if [ -n "$GOFILES" ]; then
|
||||
gofmt -w $GOFILES
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: go fmt failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Add formatted files to commit
|
||||
git add $GOFILES
|
||||
fi
|
||||
|
||||
echo "Pre-commit hooks completed successfully"
|
||||
exit 0
|
||||
```
|
||||
|
||||
### Customization
|
||||
|
||||
To modify the hook:
|
||||
```bash
|
||||
# Edit the hook
|
||||
nano .git/hooks/pre-commit
|
||||
|
||||
# Make it executable (if needed)
|
||||
chmod +x .git/hooks/pre-commit
|
||||
```
|
||||
|
||||
### Disabling Hooks
|
||||
|
||||
To skip hooks for a single commit:
|
||||
```bash
|
||||
git commit --no-verify -m "✨ feat: add new feature"
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- [Gitmoji Official Site](https://gitmoji.dev)
|
||||
- [Common Gitmoji Reference in AGENTS.md](#common-gitmoji-reference)
|
||||
- [Conventional Commits](https://www.conventionalcommits.org/)
|
||||
- [Git Hooks Documentation](https://git-scm.com/docs/githooks)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
@@ -173,8 +277,37 @@ git commit -m "✨ feat: add BDD framework" -m "- Implement Godog testing" -m "-
|
||||
git commit -m "♻️ refactor: improve BDD implementation" -m "- Update step patterns to match Godog exactly" -m "- Add JSON response validation" -m "- Implement server verification" -m "- Update all templates and documentation"
|
||||
```
|
||||
|
||||
### Git Hooks Issues
|
||||
|
||||
**Hook fails with error:**
|
||||
```bash
|
||||
# Check the specific error message
|
||||
# Fix the underlying issue (e.g., Go syntax error, dependency issue)
|
||||
# Commit again
|
||||
```
|
||||
|
||||
**Hook runs too slow:**
|
||||
```bash
|
||||
# The hooks are optimized to only process necessary files
|
||||
# If performance is an issue, check for very large Go files
|
||||
# Consider splitting large files into smaller modules
|
||||
```
|
||||
|
||||
**Need to bypass hooks temporarily:**
|
||||
```bash
|
||||
# Use --no-verify flag
|
||||
git commit --no-verify -m "⚡ chore: quick fix"
|
||||
|
||||
# Remember to run hooks manually later
|
||||
go mod tidy
|
||||
gofmt -w .
|
||||
```
|
||||
|
||||
## Assets
|
||||
|
||||
- **gitmoji-cheatsheet.md**: Quick reference for common gitmoji
|
||||
- **commit-template.txt**: Git commit message template
|
||||
- **validate-commit.sh**: Commit message validation script
|
||||
- **validate-commit.sh**: Commit message validation script
|
||||
- **git-hooks/**: Git hooks for automatic code quality
|
||||
- **pre-commit**: Hook that runs `go mod tidy` and `go fmt`
|
||||
- **README.md**: Documentation for Git hooks
|
||||
Reference in New Issue
Block a user