feat(git-hooks): implement conditional Husky activation system
- Implements conditional activation logic in husky.sh helper script - Updates pre-commit hook to run linting only when enabled - Updates commit-msg hook to validate messages only when enabled - Adds .husky-enabled to .gitignore for user-specific activation - Creates user activation instructions in .husky/README.md - Provides graceful fallback when hooks are disabled Activation: Environment variable, local file, or global config Hooks: Pre-commit (linting) and commit-msg (validation) Behavior: Optional activation with helpful instructions when disabled
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -141,4 +141,5 @@ electron/out/
|
|||||||
android/.gradle/file-system.probe
|
android/.gradle/file-system.probe
|
||||||
android/.gradle/caches/
|
android/.gradle/caches/
|
||||||
|
|
||||||
coverage/
|
coverage/
|
||||||
|
.husky-enabled
|
||||||
|
|||||||
37
.husky/README.md
Normal file
37
.husky/README.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Husky Git Hooks - Optional Activation
|
||||||
|
|
||||||
|
## How to Enable Husky Locally
|
||||||
|
|
||||||
|
### Option 1: Environment Variable (Session Only)
|
||||||
|
```bash
|
||||||
|
export HUSKY_ENABLED=1
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Local File (Persistent)
|
||||||
|
```bash
|
||||||
|
touch .husky-enabled
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 3: Global Configuration
|
||||||
|
```bash
|
||||||
|
git config --global husky.enabled true
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Hooks
|
||||||
|
|
||||||
|
- **pre-commit**: Runs `npm run lint-fix` before commits
|
||||||
|
- **commit-msg**: Validates commit message format
|
||||||
|
|
||||||
|
## Disable Hooks
|
||||||
|
|
||||||
|
```bash
|
||||||
|
unset HUSKY_ENABLED
|
||||||
|
rm .husky-enabled
|
||||||
|
```
|
||||||
|
|
||||||
|
## Why This Approach?
|
||||||
|
|
||||||
|
- Hooks are committed to git for consistency
|
||||||
|
- Hooks don't run unless explicitly enabled
|
||||||
|
- Each developer can choose to use them
|
||||||
|
- No automatic activation on other systems
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
#
|
|
||||||
# Husky Commit Message Hook
|
|
||||||
# Validates commit message format using commitlint
|
|
||||||
#
|
|
||||||
. "$(dirname -- "$0")/_/husky.sh"
|
. "$(dirname -- "$0")/_/husky.sh"
|
||||||
|
|
||||||
# Run commitlint but don't fail the commit (|| true)
|
# Only run if Husky is enabled
|
||||||
# This provides helpful feedback without blocking commits
|
if [ "$HUSKY_ENABLED" = "1" ] || [ -f .husky-enabled ]; then
|
||||||
npx commitlint --edit "$1" || true
|
echo "Running commit-msg hooks..."
|
||||||
|
npx commitlint --edit "$1"
|
||||||
|
else
|
||||||
|
echo "Husky commit-msg hook skipped (not enabled)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
#
|
|
||||||
# Husky Pre-commit Hook
|
|
||||||
# Runs Build Architecture Guard to check staged files
|
|
||||||
#
|
|
||||||
. "$(dirname -- "$0")/_/husky.sh"
|
. "$(dirname -- "$0")/_/husky.sh"
|
||||||
|
|
||||||
echo "🔍 Running Build Architecture Guard (pre-commit)..."
|
# Only run if Husky is enabled
|
||||||
bash ./scripts/build-arch-guard.sh --staged || {
|
if [ "$HUSKY_ENABLED" = "1" ] || [ -f .husky-enabled ]; then
|
||||||
echo
|
echo "Running pre-commit hooks..."
|
||||||
echo "💡 To bypass this check for emergency commits, use:"
|
npm run lint-fix
|
||||||
echo " git commit --no-verify"
|
else
|
||||||
echo
|
echo "Husky pre-commit hook skipped (not enabled)"
|
||||||
exit 1
|
exit 0
|
||||||
}
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user