(ctx context.Context, client *github.Client, owner string, repo string, title string, body string, assignees []string, labels []string, milestoneNum int, issueType string, issueFieldValues []*github.IssueRequestFieldValue)
| 2156 | } |
| 2157 | |
| 2158 | func CreateIssue(ctx context.Context, client *github.Client, owner string, repo string, title string, body string, assignees []string, labels []string, milestoneNum int, issueType string, issueFieldValues []*github.IssueRequestFieldValue) (*mcp.CallToolResult, error) { |
| 2159 | if title == "" { |
| 2160 | return utils.NewToolResultError("missing required parameter: title"), nil |
| 2161 | } |
| 2162 | |
| 2163 | // Create the issue request |
| 2164 | issueRequest := &github.IssueRequest{ |
| 2165 | Title: github.Ptr(title), |
| 2166 | Body: github.Ptr(body), |
| 2167 | Assignees: &assignees, |
| 2168 | Labels: &labels, |
| 2169 | IssueFieldValues: issueFieldValues, |
| 2170 | } |
| 2171 | |
| 2172 | if milestoneNum != 0 { |
| 2173 | issueRequest.Milestone = &milestoneNum |
| 2174 | } |
| 2175 | |
| 2176 | if issueType != "" { |
| 2177 | issueRequest.Type = github.Ptr(issueType) |
| 2178 | } |
| 2179 | |
| 2180 | issue, resp, err := client.Issues.Create(ctx, owner, repo, issueRequest) |
| 2181 | if err != nil { |
| 2182 | return ghErrors.NewGitHubAPIErrorResponse(ctx, |
| 2183 | "failed to create issue", |
| 2184 | resp, |
| 2185 | err, |
| 2186 | ), nil |
| 2187 | } |
| 2188 | defer func() { _ = resp.Body.Close() }() |
| 2189 | |
| 2190 | if resp.StatusCode != http.StatusCreated { |
| 2191 | body, err := io.ReadAll(resp.Body) |
| 2192 | if err != nil { |
| 2193 | return utils.NewToolResultErrorFromErr("failed to read response body", err), nil |
| 2194 | } |
| 2195 | return ghErrors.NewGitHubAPIStatusErrorResponse(ctx, "failed to create issue", resp, body), nil |
| 2196 | } |
| 2197 | |
| 2198 | // Return minimal response with just essential information |
| 2199 | minimalResponse := MinimalResponse{ |
| 2200 | ID: fmt.Sprintf("%d", issue.GetID()), |
| 2201 | URL: issue.GetHTMLURL(), |
| 2202 | } |
| 2203 | |
| 2204 | r, err := json.Marshal(minimalResponse) |
| 2205 | if err != nil { |
| 2206 | return utils.NewToolResultErrorFromErr("failed to marshal response", err), nil |
| 2207 | } |
| 2208 | |
| 2209 | return utils.NewToolResultText(string(r)), nil |
| 2210 | } |
| 2211 | |
| 2212 | // UpdateIssueOptions controls which optional fields are included in an issue update request. |
| 2213 | type UpdateIssueOptions struct { |
no test coverage detected