#!/bin/sh # Pre-commit hook for ULFlow Golang Starter Kit # This hook runs linters and checks before allowing a commit echo "Running pre-commit checks..." echo "Current working directory: $(pwd)" echo "Which golangci-lint: $(which golangci-lint)" echo "golangci-lint version: $(golangci-lint version)" cd "$PROJECT_ROOT" || exit 1 # Exit if cd fails # Check for staged Go files STAGED_GO_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep "\.go$") if [[ "$STAGED_GO_FILES" = "" ]]; then echo "No Go files staged for commit. Skipping Go-specific checks." else # Run golangci-lint on staged files echo "Running golangci-lint..." golangci-lint run ./... if [ $? -ne 0 ]; then echo "golangci-lint failed. Please fix the issues before committing." exit 1 fi # Check for formatting issues echo "Checking Go formatting..." gofmt -l $STAGED_GO_FILES if [ $? -ne 0 ]; then echo "gofmt failed. Please run 'gofmt -w' on your files before committing." exit 1 fi # Run tests related to staged files echo "Running relevant tests..." go test $(go list ./... | grep -v vendor) -short if [ $? -ne 0 ]; then echo "Tests failed. Please fix the tests before committing." exit 1 fi fi # Check for sensitive information in staged files echo "Checking for sensitive information..." if git diff --cached | grep -E "(API_KEY|SECRET|PASSWORD|TOKEN).*[A-Za-z0-9_/-]{8,}" > /dev/null; then echo "WARNING: Possible sensitive information detected in commit." echo "Please verify you're not committing secrets, credentials or personal data." echo "Press Enter to continue or Ctrl+C to abort the commit." read fi echo "Pre-commit checks passed!" exit 0