pre-commit
1 #!/bin/bash 2 # SPDX-License-Identifier: AGPL-3.0-or-later 3 # SPDX-FileCopyrightText: 2025 hyperpolymath 4 # 5 # Pre-commit hook to enforce Hyperpolymath Language Policy 6 # Blocks: TypeScript, Python, Go, npm/package.json 7 8 set -e 9 10 RED='\033[0;31m' 11 GREEN='\033[0;32m' 12 YELLOW='\033[1;33m' 13 NC='\033[0m' 14 15 echo -e "${YELLOW}Checking Hyperpolymath Language Policy...${NC}" 16 17 STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM) 18 VIOLATIONS=0 19 20 for file in $STAGED_FILES; do 21 if [[ "$file" =~ \.tsx?$ ]] && [[ ! "$file" =~ \.d\.ts$ ]]; then 22 echo -e "${RED}BLOCKED: TypeScript file: $file${NC}" 23 echo " -> Use ReScript (.res) instead" 24 VIOLATIONS=$((VIOLATIONS + 1)) 25 fi 26 if [[ "$file" =~ \.py$ ]] && [[ ! "$file" =~ (salt|pillar|grain|state|sls) ]]; then 27 echo -e "${RED}BLOCKED: Python file: $file${NC}" 28 echo " -> Python only allowed for SaltStack" 29 VIOLATIONS=$((VIOLATIONS + 1)) 30 fi 31 if [[ "$file" =~ \.go$ ]]; then 32 echo -e "${RED}BLOCKED: Go file: $file${NC}" 33 echo " -> Use Rust instead" 34 VIOLATIONS=$((VIOLATIONS + 1)) 35 fi 36 if [[ "$file" == "package.json" ]] || [[ "$file" =~ /package\.json$ ]]; then 37 echo -e "${RED}BLOCKED: package.json: $file${NC}" 38 echo " -> Use deno.json instead" 39 VIOLATIONS=$((VIOLATIONS + 1)) 40 fi 41 done 42 43 if [ $VIOLATIONS -gt 0 ]; then 44 echo -e "${RED}COMMIT BLOCKED: $VIOLATIONS violation(s)${NC}" 45 exit 1 46 fi 47 echo -e "${GREEN}Language policy check passed${NC}"