| #!/bin/bash
|
|
|
|
|
|
|
| set -e
|
|
|
| HOOK_DIR="$(git rev-parse --show-toplevel)/.git/hooks"
|
| PRECOMMIT_HOOK="$HOOK_DIR/pre-commit"
|
|
|
| echo "🔧 Installing PRIX pre-commit hook..."
|
|
|
| if [ ! -d "$HOOK_DIR" ]; then
|
| echo "❌ Error: .git/hooks directory not found. Are you in a git repository?"
|
| exit 1
|
| fi
|
|
|
| if [ -f "$PRECOMMIT_HOOK" ]; then
|
| echo "⚠️ Existing pre-commit hook found. Backing up to pre-commit.bak"
|
| cp "$PRECOMMIT_HOOK" "$HOOK_DIR/pre-commit.bak"
|
| fi
|
|
|
| cat > "$PRECOMMIT_HOOK" << 'EOF'
|
|
|
|
|
|
|
|
|
|
|
| PRIX_MIN_SEVERITY="${PRIX_MIN_SEVERITY:-minor}"
|
| PRIX_MIN_CONFIDENCE="${PRIX_MIN_CONFIDENCE:-60}"
|
| PRIX_DISABLE="${PRIX_DISABLE:-false}"
|
|
|
|
|
| RED='\033[0;31m'
|
| YELLOW='\033[0;33m'
|
| GREEN='\033[0;32m'
|
| NC='\033[0m'
|
|
|
| if [ "$PRIX_DISABLE" = "true" ]; then
|
| echo "ℹ️ PRIX pre-commit disabled (PRIX_DISABLE=true)"
|
| exit 0
|
| fi
|
|
|
| echo "🔍 PRIX: Running AI code review on staged files..."
|
|
|
|
|
| if [ -z "$GROQ_API_KEY" ] && [ -z "$AI_API_KEY" ]; then
|
| echo -e "${YELLOW}⚠️ Warning: GROQ_API_KEY or AI_API_KEY not set. Skipping PRIX review.${NC}"
|
| echo " Set these environment variables to enable pre-commit review."
|
| exit 0
|
| fi
|
|
|
|
|
| STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(ts|tsx|js|jsx|go|py)$' || true)
|
|
|
| if [ -z "$STAGED_FILES" ]; then
|
| echo "ℹ️ No supported files staged for review"
|
| exit 0
|
| fi
|
|
|
| FILE_COUNT=$(echo "$STAGED_FILES" | wc -l)
|
| echo "📋 Found $FILE_COUNT file(s) to review"
|
|
|
|
|
| npx prix-cli \
|
| --staged \
|
| --min-severity "$PRIX_MIN_SEVERITY" \
|
| --min-confidence "$PRIX_MIN_CONFIDENCE" \
|
| --output console 2>&1
|
|
|
| EXIT_CODE=$?
|
|
|
| if [ $EXIT_CODE -eq 0 ]; then
|
| echo -e "${GREEN}✅ PRIX: No critical issues found${NC}"
|
| elif [ $EXIT_CODE -eq 1 ]; then
|
| if [ -n "$CI" ]; then
|
| echo -e "${RED}❌ PRIX: Critical issues found. Commit blocked in CI.${NC}"
|
| echo " To bypass this hook in local development, use: git commit --no-verify"
|
| else
|
| echo -e "${YELLOW}⚠️ PRIX: Issues found. Review recommended but not blocking.${NC}"
|
| EXIT_CODE=0
|
| fi
|
| fi
|
|
|
| exit $EXIT_CODE
|
| EOF
|
|
|
| chmod +x "$PRECOMMIT_HOOK"
|
|
|
| echo -e "${GREEN}✅ PRIX pre-commit hook installed!${NC}"
|
| echo ""
|
| echo "Configuration (environment variables):"
|
| echo " PRIX_MIN_SEVERITY - Minimum severity to report (critical|major|minor|info) [default: minor]"
|
| echo " PRIX_MIN_CONFIDENCE - Minimum confidence threshold 0-100 [default: 60]"
|
| echo " PRIX_DISABLE - Set to 'true' to skip review [default: false]"
|
| echo ""
|
| echo "To bypass this hook locally: git commit --no-verify"
|
|
|