Files
fenrir/tools/install_validation_hook.sh

110 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# Safe Installation of Fenrir Validation Hook
#
# This script safely installs the composite pre-commit hook that combines
# your existing version management with new code quality validation.
set -e
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[1;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}Fenrir Validation Hook Installation${NC}"
echo "===================================="
# Check we're in the right directory
if [ ! -f "CLAUDE.md" ] || [ ! -d "src/fenrirscreenreader" ]; then
echo -e "${RED}Error: Must be run from Fenrir project root directory${NC}"
exit 1
fi
# Check if there's already a pre-commit hook
if [ -f ".git/hooks/pre-commit" ]; then
echo -e "\n${YELLOW}Existing pre-commit hook detected${NC}"
# Check if it's a symlink (our validation hook) or a regular file (version hook)
if [ -L ".git/hooks/pre-commit" ]; then
echo -e "${YELLOW}Current hook appears to be our validation hook (symlink)${NC}"
read -p "Replace with composite hook that includes version management? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}Installation cancelled${NC}"
exit 0
fi
rm .git/hooks/pre-commit
else
echo -e "${GREEN}Current hook appears to be the version management hook (regular file)${NC}"
# Back up the existing hook
backup_name=".git/hooks/pre-commit.backup.$(date +%Y%m%d_%H%M%S)"
cp .git/hooks/pre-commit "$backup_name"
echo -e "${GREEN}✓ Existing hook backed up to: $backup_name${NC}"
# Verify the backup contains version management code
if grep -q "versionFile" "$backup_name"; then
echo -e "${GREEN}✓ Backup contains version management logic${NC}"
else
echo -e "${YELLOW}⚠ Backup doesn't appear to contain version management logic${NC}"
echo -e "${YELLOW} You may need to manually restore version management functionality${NC}"
fi
read -p "Install composite hook (version management + validation)? (Y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
echo -e "${YELLOW}Installation cancelled${NC}"
exit 0
fi
fi
else
echo -e "${YELLOW}No existing pre-commit hook found${NC}"
read -p "Install composite hook? (Y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
echo -e "${YELLOW}Installation cancelled${NC}"
exit 0
fi
fi
# Install the composite hook
echo -e "\n${YELLOW}Installing composite pre-commit hook...${NC}"
cp tools/pre-commit-composite .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
echo -e "${GREEN}✓ Composite hook installed${NC}"
# Test the hook
echo -e "\n${YELLOW}Testing the composite hook...${NC}"
if ./.git/hooks/pre-commit >/dev/null 2>&1; then
echo -e "${GREEN}✓ Composite hook test passed${NC}"
else
echo -e "${RED}⚠ Composite hook test found issues (this may be normal)${NC}"
echo " Run manually to see details: ./.git/hooks/pre-commit"
fi
# Final instructions
echo -e "\n${GREEN}Installation Complete!${NC}"
echo ""
echo "Your composite pre-commit hook now provides:"
echo " 1. ✓ Version management (existing functionality preserved)"
echo " 2. ✓ Python syntax validation"
echo " 3. ✓ Core module import testing"
echo " 4. ✓ Common issue detection"
echo ""
echo "Development workflow:"
echo " • Make your changes"
echo " • git add . && git commit"
echo " • Hook runs automatically (version update + validation)"
echo ""
echo "Manual validation (optional):"
echo " • python3 tools/validate_syntax.py --fix"
echo " • python3 tools/validate_release.py --quick"
echo ""
echo -e "${BLUE}Environment variables:${NC}"
echo -e "${BLUE} SKIP_VERSION_UPDATE=1 Skip version management${NC}"
echo ""
if [ -f ".git/hooks/pre-commit.backup."* ]; then
echo -e "${YELLOW}Note: Your original hook is backed up and can be restored if needed${NC}"
fi