MCPcopy Create free account
hub / github.com/github/gh-aw / RunProjectNew

Function RunProjectNew

pkg/cli/project_command.go:113–209  ·  view source on GitHub ↗

RunProjectNew executes the project creation logic

(ctx context.Context, config ProjectConfig)

Source from the content-addressed store, hash-verified

111
112// RunProjectNew executes the project creation logic
113func RunProjectNew(ctx context.Context, config ProjectConfig) error {
114 projectLog.Printf("Creating project: title=%s, owner=%s, repo=%s", config.Title, config.Owner, config.Repo)
115
116 // Resolve owner type
117 ownerType := "org"
118 ownerLogin := config.Owner
119 if config.Owner == "@me" {
120 ownerType = "user"
121 // Get current user
122 currentUser, err := getCurrentUser(ctx)
123 if err != nil {
124 return fmt.Errorf("failed to get current user: %w", err)
125 }
126 ownerLogin = currentUser
127 console.LogVerbose(config.Verbose, "Resolved @me to user: "+ownerLogin)
128 }
129
130 config.OwnerType = ownerType
131 config.Owner = ownerLogin
132
133 // Validate owner exists
134 if err := validateOwner(ctx, config.OwnerType, config.Owner, config.Verbose); err != nil {
135 return fmt.Errorf("owner validation failed: %w", err)
136 }
137
138 // Get owner ID
139 ownerId, err := getOwnerNodeId(ctx, config.OwnerType, config.Owner, config.Verbose)
140 if err != nil {
141 return fmt.Errorf("failed to get owner ID: %w", err)
142 }
143
144 // Create project
145 fmt.Fprintln(os.Stderr, console.FormatInfoMessage(fmt.Sprintf("Creating project '%s' for %s %s...", config.Title, config.OwnerType, config.Owner)))
146
147 project, err := createProject(ctx, ownerId, config.Title, config.Verbose)
148 if err != nil {
149 return fmt.Errorf("failed to create project: %w", err)
150 }
151
152 projectID, ok := project["id"].(string)
153 if !ok || projectID == "" {
154 return errors.New("failed to get project ID from response")
155 }
156
157 // Link to repository if specified
158 if config.Repo != "" {
159 fmt.Fprintln(os.Stderr, console.FormatInfoMessage(fmt.Sprintf("Linking project to repository %s...", config.Repo)))
160 if err := linkProjectToRepo(ctx, projectID, config.Repo, config.Verbose); err != nil {
161 fmt.Fprintln(os.Stderr, console.FormatWarningMessage(fmt.Sprintf("Warning: Failed to link project to repository: %v", err)))
162 } else {
163 fmt.Fprintln(os.Stderr, console.FormatSuccessMessage("✓ Project linked to repository"))
164 }
165 }
166
167 // Create views and fields if requested
168 projectURL, ok := project["url"].(string)
169 if !ok || projectURL == "" {
170 return errors.New("failed to get project URL from response")

Callers 1

NewProjectNewCommandFunction · 0.85

Calls 14

LogVerboseFunction · 0.92
FormatInfoMessageFunction · 0.92
FormatWarningMessageFunction · 0.92
FormatSuccessMessageFunction · 0.92
getCurrentUserFunction · 0.85
validateOwnerFunction · 0.85
getOwnerNodeIdFunction · 0.85
createProjectFunction · 0.85
linkProjectToRepoFunction · 0.85
createStandardViewsFunction · 0.85
createStandardFieldsFunction · 0.85
ensureStatusOptionFunction · 0.85

Tested by

no test coverage detected