78 lines
1.8 KiB
Markdown
78 lines
1.8 KiB
Markdown
# Git Hooks
|
|
|
|
This directory contains Git hooks for the Portfolio project.
|
|
|
|
## Pre-Push Hook
|
|
|
|
The pre-push hook runs automatically before every `git push` and performs the following checks:
|
|
|
|
### Checks Performed:
|
|
1. **Node.js Version Check** - Ensures Node.js 20+ is installed
|
|
2. **Dependency Installation** - Installs npm dependencies if needed
|
|
3. **Linting** - Runs ESLint to check code quality
|
|
4. **Tests** - Runs Jest test suite
|
|
5. **Build** - Builds the Next.js application
|
|
6. **Security Audit** - Runs npm audit for vulnerabilities
|
|
7. **Secret Detection** - Checks for accidentally committed secrets
|
|
8. **Docker Configuration** - Validates Dockerfile and docker-compose.yml
|
|
9. **Production Checks** - Additional checks when pushing to production branch
|
|
|
|
### Production Branch Special Checks:
|
|
- Environment file validation
|
|
- Docker build test
|
|
- Deployment readiness check
|
|
|
|
### Usage:
|
|
|
|
The hook runs automatically on every push. To manually test it:
|
|
|
|
```bash
|
|
# Test the hook manually
|
|
.githooks/pre-push
|
|
|
|
# Or push to trigger it
|
|
git push origin main
|
|
```
|
|
|
|
### Bypassing the Hook:
|
|
|
|
If you need to bypass the hook in an emergency:
|
|
|
|
```bash
|
|
git push --no-verify origin main
|
|
```
|
|
|
|
**Note**: Only bypass in emergencies. The hook prevents broken code from being pushed.
|
|
|
|
### Troubleshooting:
|
|
|
|
If the hook fails:
|
|
|
|
1. **Fix the reported issues** (linting errors, test failures, etc.)
|
|
2. **Run the checks manually** to debug:
|
|
```bash
|
|
npm run lint
|
|
npm run test
|
|
npm run build
|
|
npm audit
|
|
```
|
|
3. **Check Node.js version**: `node --version` (should be 20+)
|
|
4. **Reinstall dependencies**: `rm -rf node_modules && npm ci`
|
|
|
|
### Configuration:
|
|
|
|
The hook is configured in `.git/config`:
|
|
```
|
|
[core]
|
|
hooksPath = .githooks
|
|
```
|
|
|
|
To disable hooks temporarily:
|
|
```bash
|
|
git config core.hooksPath ""
|
|
```
|
|
|
|
To re-enable:
|
|
```bash
|
|
git config core.hooksPath .githooks
|
|
``` |