GenerateActionMetadataCommand generates action.yml and README.md files for JavaScript modules
()
| 58 | |
| 59 | // GenerateActionMetadataCommand generates action.yml and README.md files for JavaScript modules |
| 60 | func GenerateActionMetadataCommand() error { |
| 61 | jsDir := "pkg/workflow/js" |
| 62 | actionsDir := "actions" |
| 63 | |
| 64 | generateActionMetadataLog.Print("Starting action metadata generation") |
| 65 | |
| 66 | // Select target JavaScript files (simple ones for proof of concept) |
| 67 | targetFiles := []string{ |
| 68 | "noop.cjs", |
| 69 | "minimize_comment.cjs", |
| 70 | "close_issue.cjs", |
| 71 | "close_pull_request.cjs", |
| 72 | "close_discussion.cjs", |
| 73 | } |
| 74 | |
| 75 | fmt.Fprintln(os.Stderr, console.FormatInfoMessage(fmt.Sprintf("🔍 Generating actions for %d JavaScript modules...", len(targetFiles)))) |
| 76 | |
| 77 | generatedCount := 0 |
| 78 | generateActionMetadataLog.Printf("Processing %d target JavaScript files in %s", len(targetFiles), jsDir) |
| 79 | for _, filename := range targetFiles { |
| 80 | jsPath := filepath.Join(jsDir, filename) |
| 81 | generateActionMetadataLog.Printf("Processing file: %s", filename) |
| 82 | |
| 83 | // Read file content directly from filesystem |
| 84 | contentBytes, err := os.ReadFile(jsPath) |
| 85 | if err != nil { |
| 86 | generateActionMetadataLog.Printf("Skipping %s: failed to read file: %v", filename, err) |
| 87 | fmt.Fprintln(os.Stderr, console.FormatWarningMessage(fmt.Sprintf("⚠ Skipping %s: %s", filename, err.Error()))) |
| 88 | continue |
| 89 | } |
| 90 | content := string(contentBytes) |
| 91 | |
| 92 | fmt.Fprintln(os.Stderr, console.FormatInfoMessage("\n📦 Processing: "+filename)) |
| 93 | |
| 94 | // Extract metadata |
| 95 | metadata, err := extractActionMetadata(filename, content) |
| 96 | if err != nil { |
| 97 | fmt.Fprintln(os.Stderr, console.FormatErrorMessage(fmt.Sprintf("✗ Failed to extract metadata from %s: %s", filename, err.Error()))) |
| 98 | continue |
| 99 | } |
| 100 | |
| 101 | // Create action directory |
| 102 | actionDir := filepath.Join(actionsDir, metadata.ActionName) |
| 103 | if err := os.MkdirAll(actionDir, constants.DirPermPublic); err != nil { |
| 104 | return fmt.Errorf("failed to create directory %s: %w", actionDir, err) |
| 105 | } |
| 106 | |
| 107 | // Create src directory |
| 108 | srcDir := filepath.Join(actionDir, "src") |
| 109 | if err := os.MkdirAll(srcDir, constants.DirPermPublic); err != nil { |
| 110 | return fmt.Errorf("failed to create directory %s: %w", srcDir, err) |
| 111 | } |
| 112 | |
| 113 | // Generate action.yml |
| 114 | if err := generateActionYml(actionDir, metadata); err != nil { |
| 115 | fmt.Fprintln(os.Stderr, console.FormatErrorMessage("✗ Failed to generate action.yml: "+err.Error())) |
| 116 | continue |
| 117 | } |