You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							214 lines
						
					
					
						
							6.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							214 lines
						
					
					
						
							6.4 KiB
						
					
					
				| #!/bin/bash | |
|  | |
| # Setup Markdown Pre-commit Hooks | |
| # This script installs pre-commit hooks that automatically fix markdown formatting | |
| 
 | |
| set -e | |
| 
 | |
| echo "🔧 Setting up Markdown Pre-commit Hooks..." | |
| 
 | |
| # Check if pre-commit is installed | |
| if ! command -v pre-commit &> /dev/null; then | |
|     echo "📦 Installing pre-commit..." | |
|     pip install pre-commit | |
| else | |
|     echo "✅ pre-commit already installed" | |
| fi | |
| 
 | |
| # Create .pre-commit-config.yaml if it doesn't exist | |
| if [ ! -f .pre-commit-config.yaml ]; then | |
|     echo "📝 Creating .pre-commit-config.yaml..." | |
|     cat > .pre-commit-config.yaml << 'EOF' | |
| repos: | |
|   - repo: https://github.com/igorshubovych/markdownlint-cli | |
|     rev: v0.38.0 | |
|     hooks: | |
|       - id: markdownlint | |
|         args: [--fix, --config, .markdownlint.json] | |
|         files: \.(md|mdc)$ | |
|         description: "Auto-fix markdown formatting issues" | |
|         stages: [commit] | |
|         additional_dependencies: [markdownlint-cli] | |
|  | |
|   - repo: local | |
|     hooks: | |
|       - id: markdown-format-check | |
|         name: Markdown Format Validation | |
|         entry: bash -c 'echo "Checking markdown files..." && npx markdownlint --config .markdownlint.json "$@"' | |
|         language: system | |
|         files: \.(md|mdc)$ | |
|         stages: [commit] | |
|         description: "Validate markdown formatting" | |
|         pass_filenames: true | |
|  | |
|   - repo: local | |
|     hooks: | |
|       - id: markdown-line-length | |
|         name: Markdown Line Length Check | |
|         entry: bash -c ' | |
|           for file in "$@"; do | |
|             if [[ "$file" =~ \.(md|mdc)$ ]]; then | |
|               echo "Checking line length in $file..." | |
|               if grep -q ".\{81,\}" "$file"; then | |
|                 echo "❌ Line length violations found in $file" | |
|                 echo "Lines exceeding 80 characters:" | |
|                 grep -n ".\{81,\}" "$file" | head -5 | |
|                 exit 1 | |
|               fi | |
|             fi | |
|           done | |
|         ' | |
|         language: system | |
|         files: \.(md|mdc)$ | |
|         stages: [commit] | |
|         description: "Check markdown line length (80 chars max)" | |
|         pass_filenames: true | |
|  | |
|   - repo: local | |
|     hooks: | |
|       - id: markdown-blank-lines | |
|         name: Markdown Blank Line Validation | |
|         entry: bash -c ' | |
|           for file in "$@"; do | |
|             if [[ "$file" =~ \.(md|mdc)$ ]]; then | |
|               echo "Checking blank lines in $file..." | |
|               # Check for multiple consecutive blank lines | |
|               if grep -q "^$" "$file" && grep -A1 "^$" "$file" | grep -q "^$"; then | |
|                 echo "❌ Multiple consecutive blank lines found in $file" | |
|                 exit 1 | |
|               fi | |
|               # Check for missing blank lines around headings | |
|               if grep -B1 "^##" "$file" | grep -v "^##" | grep -v "^$" | grep -v "^--"; then | |
|                 echo "❌ Missing blank line before heading in $file" | |
|                 exit 1 | |
|               fi | |
|             fi | |
|           done | |
|         ' | |
|         language: system | |
|         files: \.(md|mdc)$ | |
|         stages: [commit] | |
|         description: "Validate markdown blank line formatting" | |
|         pass_filenames: true | |
| EOF | |
|     echo "✅ Created .pre-commit-config.yaml" | |
| else | |
|     echo "✅ .pre-commit-config.yaml already exists" | |
| fi | |
| 
 | |
| # Install the pre-commit hooks | |
| echo "🔗 Installing pre-commit hooks..." | |
| pre-commit install | |
| 
 | |
| # Install markdownlint if not present | |
| if ! command -v npx &> /dev/null; then | |
|     echo "📦 Installing Node.js dependencies..." | |
|     npm install --save-dev markdownlint-cli | |
| else | |
|     if ! npx markdownlint --version &> /dev/null; then | |
|         echo "📦 Installing markdownlint-cli..." | |
|         npm install --save-dev markdownlint-cli | |
|     else | |
|         echo "✅ markdownlint-cli already available" | |
|     fi | |
| fi | |
| 
 | |
| # Create a markdown auto-fix script | |
| echo "📝 Creating markdown auto-fix script..." | |
| cat > scripts/fix-markdown.sh << 'EOF' | |
| #!/bin/bash | |
|  | |
| # Auto-fix markdown formatting issues | |
| # Usage: ./scripts/fix-markdown.sh [file_or_directory] | |
|  | |
| set -e | |
|  | |
| FIX_MARKDOWN() { | |
|     local target="$1" | |
|      | |
|     if [ -f "$target" ]; then | |
|         # Fix single file | |
|         if [[ "$target" =~ \.(md|mdc)$ ]]; then | |
|             echo "🔧 Fixing markdown formatting in $target..." | |
|             npx markdownlint --fix "$target" || true | |
|         fi | |
|     elif [ -d "$target" ]; then | |
|         # Fix all markdown files in directory | |
|         echo "🔧 Fixing markdown formatting in $target..." | |
|         find "$target" -name "*.md" -o -name "*.mdc" | while read -r file; do | |
|             echo "  Processing $file..." | |
|             npx markdownlint --fix "$file" || true | |
|         done | |
|     else | |
|         echo "❌ Target $target not found" | |
|         exit 1 | |
|     fi | |
| } | |
|  | |
| # Default to current directory if no target specified | |
| TARGET="${1:-.}" | |
| FIX_MARKDOWN "$TARGET" | |
|  | |
| echo "✅ Markdown formatting fixes applied!" | |
| echo "💡 Run 'git diff' to see what was changed" | |
| EOF | |
| 
 | |
| chmod +x scripts/fix-markdown.sh | |
| 
 | |
| # Create a markdown validation script | |
| echo "📝 Creating markdown validation script..." | |
| cat > scripts/validate-markdown.sh << 'EOF' | |
| #!/bin/bash | |
|  | |
| # Validate markdown formatting without auto-fixing | |
| # Usage: ./scripts/validate-markdown.sh [file_or_directory] | |
|  | |
| set -e | |
|  | |
| VALIDATE_MARKDOWN() { | |
|     local target="$1" | |
|      | |
|     if [ -f "$target" ]; then | |
|         # Validate single file | |
|         if [[ "$target" =~ \.(md|mdc)$ ]]; then | |
|             echo "🔍 Validating markdown formatting in $target..." | |
|             npx markdownlint "$target" | |
|         fi | |
|     elif [ -d "$target" ]; then | |
|         # Validate all markdown files in directory | |
|         echo "🔍 Validating markdown formatting in $target..." | |
|         find "$target" -name "*.md" -o -name "*.mdc" | while read -r file; do | |
|             echo "  Checking $file..." | |
|             npx markdownlint "$file" || true | |
|         done | |
|     else | |
|         echo "❌ Target $target not found" | |
|         exit 1 | |
|     fi | |
| } | |
|  | |
| # Default to current directory if no target specified | |
| TARGET="${1:-.}" | |
| VALIDATE_MARKDOWN "$TARGET" | |
|  | |
| echo "✅ Markdown validation complete!" | |
| EOF | |
| 
 | |
| chmod +x scripts/validate-markdown.sh | |
| 
 | |
| echo "" | |
| echo "🎉 Markdown Pre-commit Hooks Setup Complete!" | |
| echo "" | |
| echo "📋 What was installed:" | |
| echo "  ✅ pre-commit hooks for automatic markdown formatting" | |
| echo "  ✅ .pre-commit-config.yaml with markdown rules" | |
| echo "  ✅ scripts/fix-markdown.sh for manual fixes" | |
| echo "  ✅ scripts/validate-markdown.sh for validation" | |
| echo "" | |
| echo "🚀 Usage:" | |
| echo "  • Hooks run automatically on commit" | |
| echo "  • Manual fix: ./scripts/fix-markdown.sh [file/dir]" | |
| echo "  • Manual check: ./scripts/validate-markdown.sh [file/dir]" | |
| echo "  • Test hooks: pre-commit run --all-files" | |
| echo "" | |
| echo "💡 The hooks will now automatically fix markdown issues before commits!"
 | |
| 
 |