mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| 
 | |
| # Script to create GitHub issues from text files in a directory
 | |
| # Usage: ./create_issues_from_files.sh <directory> <owner/repo>
 | |
| 
 | |
| # FYI: Generated almost entirely with warp.dev as a quick hack for creating issues from betterer issues output
 | |
| 
 | |
| set -e
 | |
| 
 | |
| # Function to display usage
 | |
| usage() {
 | |
|     echo "Usage: $0 <directory> <owner/repo>"
 | |
|     echo ""
 | |
|     echo "Arguments:"
 | |
|     echo "  directory   Directory containing text files"
 | |
|     echo "  owner/repo  GitHub repository in format 'owner/repository'"
 | |
|     echo ""
 | |
|     echo "Examples:"
 | |
|     echo "  $0 ./issues myuser/myrepo"
 | |
|     echo "  $0 /path/to/issues organization/project"
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| # Check if correct number of arguments provided
 | |
| if [ $# -ne 2 ]; then
 | |
|     echo "Error: Incorrect number of arguments"
 | |
|     usage
 | |
| fi
 | |
| 
 | |
| DIRECTORY="$1"
 | |
| REPO="$2"
 | |
| 
 | |
| # Validate directory exists
 | |
| if [ ! -d "$DIRECTORY" ]; then
 | |
|     echo "Error: Directory '$DIRECTORY' does not exist"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # Validate repository format
 | |
| if [[ ! "$REPO" =~ ^[^/]+/[^/]+$ ]]; then
 | |
|     echo "Error: Repository must be in format 'owner/repository'"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| echo "Creating issues from text files in '$DIRECTORY' for repository '$REPO'"
 | |
| echo
 | |
| 
 | |
| # Counter for created issues
 | |
| created_count=0
 | |
| error_count=0
 | |
| 
 | |
| # Process each text file in the directory
 | |
| for file in "$DIRECTORY"/*.txt; do
 | |
|     # Check if glob matched any files
 | |
|     [ -e "$file" ] || continue
 | |
| 
 | |
|     filename=$(basename "$file")
 | |
| 
 | |
|     echo "Processing: $filename"
 | |
| 
 | |
|     # Read file content
 | |
|     if [ ! -r "$file" ]; then
 | |
|         echo "  ❌ Error: Cannot read file '$file'"
 | |
|         ((error_count++))
 | |
|         continue
 | |
|     fi
 | |
| 
 | |
|     content=$(cat "$file")
 | |
| 
 | |
|     # Skip empty files
 | |
|     if [ -z "$content" ]; then
 | |
|         echo "  ⚠️  Skipping empty file"
 | |
|         continue
 | |
|     fi
 | |
| 
 | |
|     # Parse codeowner from first line (assuming format like "@username" or "@team/name")
 | |
|     first_line=$(echo "$content" | head -n 1)
 | |
|     codeowner=""
 | |
| 
 | |
|     # Extract codeowner if first line contains @username or @team/name pattern
 | |
|     if [[ "$first_line" =~ @[a-zA-Z0-9_/-]+ ]]; then
 | |
|         codeowner=$(echo "$first_line" | grep -o '@[a-zA-Z0-9_/-]*' | head -n 1)
 | |
|         # Strip @grafana/ prefix if present
 | |
|         codeowner=${codeowner#@grafana/}
 | |
|     fi
 | |
| 
 | |
|     title="Betterer: React Hooks ($codeowner)"
 | |
| 
 | |
|     # Create the issue using GitHub CLI
 | |
|     if gh issue create \
 | |
|         --repo "$REPO" \
 | |
|         --title "$title" \
 | |
|         --body "$content" > /dev/null 2>&1; then
 | |
|         echo "  ✅ Created issue: $title"
 | |
|         ((created_count++))
 | |
|     else
 | |
|         echo "  ❌ Failed to create issue: $title"
 | |
|         ((error_count++))
 | |
|     fi
 | |
| done
 | |
| 
 | |
| echo
 | |
| echo "Summary:"
 | |
| echo "  Issues created: $created_count"
 | |
| echo "  Errors: $error_count"
 | |
| 
 | |
| if [ $created_count -eq 0 ] && [ $error_count -eq 0 ]; then
 | |
|     echo "  No .txt files found in '$DIRECTORY'"
 | |
| fi
 |