ParseGitHubToolsets parses the toolsets string and expands "default" and "all" into their constituent toolsets. It handles comma-separated lists and deduplicates.
(toolsetsStr string)
| 26 | // ParseGitHubToolsets parses the toolsets string and expands "default" and "all" |
| 27 | // into their constituent toolsets. It handles comma-separated lists and deduplicates. |
| 28 | func ParseGitHubToolsets(toolsetsStr string) []string { |
| 29 | toolsetsLog.Printf("Parsing GitHub toolsets: %q", toolsetsStr) |
| 30 | |
| 31 | if toolsetsStr == "" { |
| 32 | toolsetsLog.Printf("Empty toolsets string, using defaults: %v", DefaultGitHubToolsets) |
| 33 | return DefaultGitHubToolsets |
| 34 | } |
| 35 | |
| 36 | toolsets := strings.Split(toolsetsStr, ",") |
| 37 | var expanded []string |
| 38 | seenToolsets := make(map[string]struct { |
| 39 | }) |
| 40 | |
| 41 | for _, toolset := range toolsets { |
| 42 | toolset = strings.TrimSpace(toolset) |
| 43 | if toolset == "" { |
| 44 | continue |
| 45 | } |
| 46 | |
| 47 | switch toolset { |
| 48 | case "default": |
| 49 | // Add default toolsets |
| 50 | toolsetsLog.Printf("Expanding 'default' to %d toolsets", len(DefaultGitHubToolsets)) |
| 51 | for _, dt := range DefaultGitHubToolsets { |
| 52 | if !setutil.Contains(seenToolsets, dt) { |
| 53 | expanded = append(expanded, dt) |
| 54 | seenToolsets[dt] = struct { |
| 55 | }{} |
| 56 | } |
| 57 | } |
| 58 | case "action-friendly": |
| 59 | // Add action-friendly toolsets (excludes "users" which GitHub Actions tokens don't support) |
| 60 | toolsetsLog.Printf("Expanding 'action-friendly' to %d toolsets", len(ActionFriendlyGitHubToolsets)) |
| 61 | for _, dt := range ActionFriendlyGitHubToolsets { |
| 62 | if !setutil.Contains(seenToolsets, dt) { |
| 63 | expanded = append(expanded, dt) |
| 64 | seenToolsets[dt] = struct { |
| 65 | }{} |
| 66 | } |
| 67 | } |
| 68 | case "all": |
| 69 | // Add all toolsets from the toolset permissions map, excluding those that |
| 70 | // require GitHub App-only permissions (see GitHubToolsetsExcludedFromAll). |
| 71 | toolsetsLog.Printf("Expanding 'all' to toolsets from permissions map (excluding %v)", GitHubToolsetsExcludedFromAll) |
| 72 | excludedMap := make(map[string]struct { |
| 73 | }, len(GitHubToolsetsExcludedFromAll)) |
| 74 | for _, ex := range GitHubToolsetsExcludedFromAll { |
| 75 | excludedMap[ex] = struct { |
| 76 | }{} |
| 77 | } |
| 78 | toolsetPermissionsMap := getToolsetPermissionsMap() |
| 79 | for t := range toolsetPermissionsMap { |
| 80 | if setutil.Contains(excludedMap, t) { |
| 81 | continue |
| 82 | } |
| 83 | if !setutil.Contains(seenToolsets, t) { |
| 84 | expanded = append(expanded, t) |
| 85 | seenToolsets[t] = struct { |