#!/bin/bash # # Commit message hook for MEV Bot V2 # Validates commit message format # # Install: ln -sf ../../.git-hooks/commit-msg .git/hooks/commit-msg # # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color COMMIT_MSG_FILE=$1 COMMIT_MSG=$(cat "$COMMIT_MSG_FILE") # Skip if this is a merge commit if git rev-parse -q --verify MERGE_HEAD > /dev/null; then echo -e "${GREEN}â„šī¸ Merge commit detected, skipping validation${NC}" exit 0 fi # Skip if this is an amend if [ -n "$GIT_EDITOR" ]; then echo -e "${GREEN}â„šī¸ Amend detected, skipping validation${NC}" exit 0 fi echo -e "${GREEN}📝 Validating commit message...${NC}" # Required format: type(scope): description # type: feat, fix, perf, refactor, test, docs, build, ci # scope: component name (parsers, cache, validation, etc.) PATTERN="^(feat|fix|perf|refactor|test|docs|build|ci)\([a-z0-9-]+\): .{10,}" if ! echo "$COMMIT_MSG" | grep -qE "$PATTERN"; then echo -e "${RED}❌ Invalid commit message format${NC}" echo "" echo -e "${YELLOW}Required format:${NC}" echo -e " type(scope): brief description" echo "" echo -e "${YELLOW}Valid types:${NC}" echo -e " feat - New feature" echo -e " fix - Bug fix" echo -e " perf - Performance improvement" echo -e " refactor - Code refactoring" echo -e " test - Adding or updating tests" echo -e " docs - Documentation updates" echo -e " build - Build system changes" echo -e " ci - CI/CD changes" echo "" echo -e "${YELLOW}Example:${NC}" echo -e " feat(parsers): add UniswapV2 parser with event validation" echo "" echo -e "${YELLOW}Your message:${NC}" echo -e " $COMMIT_MSG" echo "" exit 1 fi # Check for minimum description length DESCRIPTION=$(echo "$COMMIT_MSG" | head -n1 | sed 's/^[^:]*: //') if [ ${#DESCRIPTION} -lt 10 ]; then echo -e "${RED}❌ Commit description too short (minimum 10 characters)${NC}" echo -e "${YELLOW}Your description: $DESCRIPTION (${#DESCRIPTION} chars)${NC}" exit 1 fi # Check for maximum line length (72 chars for first line) FIRST_LINE=$(echo "$COMMIT_MSG" | head -n1) if [ ${#FIRST_LINE} -gt 72 ]; then echo -e "${YELLOW}âš ī¸ Warning: First line exceeds 72 characters (${#FIRST_LINE} chars)${NC}" echo -e "${YELLOW} Consider shortening the description${NC}" echo "" fi # Encourage including coverage info for test changes if echo "$COMMIT_MSG" | grep -q "^test"; then if ! echo "$COMMIT_MSG" | grep -qi "coverage"; then echo -e "${YELLOW}💡 Tip: Consider including coverage info in test commits${NC}" echo "" fi fi echo -e "${GREEN}✅ Commit message format valid${NC}" echo "" exit 0