@@ -471,25 +471,9 @@ func issueCreate(cmd *cobra.Command, args []string) error {
471471 "body" : body ,
472472 }
473473
474- if tb .HasMetadata () {
475- if tb .MetadataResult == nil {
476- resolveInput := api.RepoResolveInput {
477- Assignees : tb .Assignees ,
478- Labels : tb .Labels ,
479- Projects : tb .Projects ,
480- Milestones : tb .Milestones ,
481- }
482-
483- tb .MetadataResult , err = api .RepoResolveMetadataIDs (apiClient , baseRepo , resolveInput )
484- if err != nil {
485- return err
486- }
487- }
488-
489- err = addMetadataToIssueParams (params , tb .MetadataResult , tb .Assignees , tb .Labels , tb .Projects , tb .Milestones )
490- if err != nil {
491- return err
492- }
474+ err = addMetadataToIssueParams (apiClient , baseRepo , params , & tb )
475+ if err != nil {
476+ return err
493477 }
494478
495479 newIssue , err := api .IssueCreate (apiClient , repo , params )
@@ -505,33 +489,79 @@ func issueCreate(cmd *cobra.Command, args []string) error {
505489 return nil
506490}
507491
508- func addMetadataToIssueParams (params map [string ]interface {}, metadata * api.RepoMetadataResult , assignees , labelNames , projectNames , milestoneTitles []string ) error {
509- assigneeIDs , err := metadata .MembersToIDs (assignees )
492+ func addMetadataToIssueParams (client * api.Client , baseRepo ghrepo.Interface , params map [string ]interface {}, tb * issueMetadataState ) error {
493+ if ! tb .HasMetadata () {
494+ return nil
495+ }
496+
497+ if tb .MetadataResult == nil {
498+ resolveInput := api.RepoResolveInput {
499+ Reviewers : tb .Reviewers ,
500+ Assignees : tb .Assignees ,
501+ Labels : tb .Labels ,
502+ Projects : tb .Projects ,
503+ Milestones : tb .Milestones ,
504+ }
505+
506+ var err error
507+ tb .MetadataResult , err = api .RepoResolveMetadataIDs (client , baseRepo , resolveInput )
508+ if err != nil {
509+ return err
510+ }
511+ }
512+
513+ assigneeIDs , err := tb .MetadataResult .MembersToIDs (tb .Assignees )
510514 if err != nil {
511515 return fmt .Errorf ("could not assign user: %w" , err )
512516 }
513517 params ["assigneeIds" ] = assigneeIDs
514518
515- labelIDs , err := metadata . LabelsToIDs (labelNames )
519+ labelIDs , err := tb . MetadataResult . LabelsToIDs (tb . Labels )
516520 if err != nil {
517521 return fmt .Errorf ("could not add label: %w" , err )
518522 }
519523 params ["labelIds" ] = labelIDs
520524
521- projectIDs , err := metadata . ProjectsToIDs (projectNames )
525+ projectIDs , err := tb . MetadataResult . ProjectsToIDs (tb . Projects )
522526 if err != nil {
523527 return fmt .Errorf ("could not add to project: %w" , err )
524528 }
525529 params ["projectIds" ] = projectIDs
526530
527- if len (milestoneTitles ) > 0 {
528- milestoneID , err := metadata . MilestoneToID (milestoneTitles [0 ])
531+ if len (tb . Milestones ) > 0 {
532+ milestoneID , err := tb . MetadataResult . MilestoneToID (tb . Milestones [0 ])
529533 if err != nil {
530- return fmt .Errorf ("could not add to milestone '%s': %w" , milestoneTitles [0 ], err )
534+ return fmt .Errorf ("could not add to milestone '%s': %w" , tb . Milestones [0 ], err )
531535 }
532536 params ["milestoneId" ] = milestoneID
533537 }
534538
539+ if len (tb .Reviewers ) == 0 {
540+ return nil
541+ }
542+
543+ var userReviewers []string
544+ var teamReviewers []string
545+ for _ , r := range tb .Reviewers {
546+ if strings .ContainsRune (r , '/' ) {
547+ teamReviewers = append (teamReviewers , r )
548+ } else {
549+ userReviewers = append (teamReviewers , r )
550+ }
551+ }
552+
553+ userReviewerIDs , err := tb .MetadataResult .MembersToIDs (userReviewers )
554+ if err != nil {
555+ return fmt .Errorf ("could not request reviewer: %w" , err )
556+ }
557+ params ["userReviewerIds" ] = userReviewerIDs
558+
559+ teamReviewerIDs , err := tb .MetadataResult .TeamsToIDs (teamReviewers )
560+ if err != nil {
561+ return fmt .Errorf ("could not request reviewer: %w" , err )
562+ }
563+ params ["teamReviewerIds" ] = teamReviewerIDs
564+
535565 return nil
536566}
537567
0 commit comments