MCPcopy
hub / github.com/github/github-mcp-server / fetchExistingIssueFieldValues

Function fetchExistingIssueFieldValues

pkg/github/issues.go:402–459  ·  view source on GitHub ↗

fetchExistingIssueFieldValues retrieves the current field values for an issue as IssueRequestFieldValue entries, ready to be merged before an update.

(ctx context.Context, gqlClient *githubv4.Client, owner, repo string, issueNumber int)

Source from the content-addressed store, hash-verified

400// fetchExistingIssueFieldValues retrieves the current field values for an issue
401// as IssueRequestFieldValue entries, ready to be merged before an update.
402func fetchExistingIssueFieldValues(ctx context.Context, gqlClient *githubv4.Client, owner, repo string, issueNumber int) ([]*github.IssueRequestFieldValue, error) {
403 ctxWithFeatures := ghcontext.WithGraphQLFeatures(ctx, "issue_fields", "repo_issue_fields")
404
405 var query struct {
406 Repository struct {
407 Issue struct {
408 IssueFieldValues struct {
409 Nodes []IssueFieldValueFragment
410 } `graphql:"issueFieldValues(first: 25)"`
411 } `graphql:"issue(number: $number)"`
412 } `graphql:"repository(owner: $owner, name: $repo)"`
413 }
414
415 vars := map[string]any{
416 "owner": githubv4.String(owner),
417 "repo": githubv4.String(repo),
418 "number": githubv4.Int(issueNumber), // #nosec G115 - issue numbers are always small positive integers
419 }
420
421 if err := gqlClient.Query(ctxWithFeatures, &query, vars); err != nil {
422 return nil, fmt.Errorf("failed to fetch existing issue field values: %w", err)
423 }
424
425 var result []*github.IssueRequestFieldValue
426 for _, node := range query.Repository.Issue.IssueFieldValues.Nodes {
427 var fieldIDStr string
428 var value any
429
430 switch node.TypeName {
431 case "IssueFieldDateValue":
432 fieldIDStr = node.DateValue.Field.FullDatabaseIDStr()
433 value = string(node.DateValue.Value)
434 case "IssueFieldNumberValue":
435 fieldIDStr = node.NumberValue.Field.FullDatabaseIDStr()
436 value = float64(node.NumberValue.Value)
437 case "IssueFieldSingleSelectValue":
438 fieldIDStr = node.SingleSelectValue.Field.FullDatabaseIDStr()
439 value = string(node.SingleSelectValue.Value)
440 case "IssueFieldTextValue":
441 fieldIDStr = node.TextValue.Field.FullDatabaseIDStr()
442 value = string(node.TextValue.Value)
443 default:
444 continue
445 }
446
447 fieldID := parseFullDatabaseID(fieldIDStr)
448 if fieldID == 0 {
449 continue
450 }
451
452 result = append(result, &github.IssueRequestFieldValue{
453 FieldID: fieldID,
454 Value: value,
455 })
456 }
457
458 return result, nil
459}

Callers 1

UpdateIssueFunction · 0.85

Calls 3

parseFullDatabaseIDFunction · 0.85
FullDatabaseIDStrMethod · 0.80
StringMethod · 0.45

Tested by

no test coverage detected