Fix metadata resolver query
This commit is contained in:
parent
3abc2be0f7
commit
386a53c34a
4 changed files with 64 additions and 69 deletions
|
|
@ -623,6 +623,7 @@ func RepoResolveMetadataIDs(client *Client, repo ghrepo.Interface, input RepoRes
|
||||||
}
|
}
|
||||||
|
|
||||||
query := &bytes.Buffer{}
|
query := &bytes.Buffer{}
|
||||||
|
fmt.Fprint(query, "{\n")
|
||||||
for i, u := range users {
|
for i, u := range users {
|
||||||
fmt.Fprintf(query, "u%03d: user(login:%q){id,login}\n", i, u)
|
fmt.Fprintf(query, "u%03d: user(login:%q){id,login}\n", i, u)
|
||||||
}
|
}
|
||||||
|
|
@ -640,6 +641,7 @@ func RepoResolveMetadataIDs(client *Client, repo ghrepo.Interface, input RepoRes
|
||||||
}
|
}
|
||||||
fmt.Fprint(query, "}\n")
|
fmt.Fprint(query, "}\n")
|
||||||
}
|
}
|
||||||
|
fmt.Fprint(query, "}\n")
|
||||||
|
|
||||||
response := make(map[string]json.RawMessage)
|
response := make(map[string]json.RawMessage)
|
||||||
err = client.GraphQL(query.String(), nil, &response)
|
err = client.GraphQL(query.String(), nil, &response)
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,8 @@ func Test_RepoResolveMetadataIDs(t *testing.T) {
|
||||||
Labels: []string{"bug", "help wanted"},
|
Labels: []string{"bug", "help wanted"},
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedQuery := `u000: user(login:"monalisa"){id,login}
|
expectedQuery := `{
|
||||||
|
u000: user(login:"monalisa"){id,login}
|
||||||
u001: user(login:"hubot"){id,login}
|
u001: user(login:"hubot"){id,login}
|
||||||
u002: user(login:"octocat"){id,login}
|
u002: user(login:"octocat"){id,login}
|
||||||
repository(owner:"OWNER",name:"REPO"){
|
repository(owner:"OWNER",name:"REPO"){
|
||||||
|
|
@ -199,6 +200,7 @@ organization(login:"OWNER"){
|
||||||
t000: team(slug:"core"){id,slug}
|
t000: team(slug:"core"){id,slug}
|
||||||
t001: team(slug:"robots"){id,slug}
|
t001: team(slug:"robots"){id,slug}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
`
|
`
|
||||||
responseJSON := `
|
responseJSON := `
|
||||||
{ "data": {
|
{ "data": {
|
||||||
|
|
|
||||||
|
|
@ -471,25 +471,9 @@ func issueCreate(cmd *cobra.Command, args []string) error {
|
||||||
"body": body,
|
"body": body,
|
||||||
}
|
}
|
||||||
|
|
||||||
if tb.HasMetadata() {
|
err = addMetadataToIssueParams(apiClient, baseRepo, params, &tb)
|
||||||
if tb.MetadataResult == nil {
|
if err != nil {
|
||||||
resolveInput := api.RepoResolveInput{
|
return err
|
||||||
Assignees: tb.Assignees,
|
|
||||||
Labels: tb.Labels,
|
|
||||||
Projects: tb.Projects,
|
|
||||||
Milestones: tb.Milestones,
|
|
||||||
}
|
|
||||||
|
|
||||||
tb.MetadataResult, err = api.RepoResolveMetadataIDs(apiClient, baseRepo, resolveInput)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = addMetadataToIssueParams(params, tb.MetadataResult, tb.Assignees, tb.Labels, tb.Projects, tb.Milestones)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
newIssue, err := api.IssueCreate(apiClient, repo, params)
|
newIssue, err := api.IssueCreate(apiClient, repo, params)
|
||||||
|
|
@ -505,33 +489,79 @@ func issueCreate(cmd *cobra.Command, args []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func addMetadataToIssueParams(params map[string]interface{}, metadata *api.RepoMetadataResult, assignees, labelNames, projectNames, milestoneTitles []string) error {
|
func addMetadataToIssueParams(client *api.Client, baseRepo ghrepo.Interface, params map[string]interface{}, tb *issueMetadataState) error {
|
||||||
assigneeIDs, err := metadata.MembersToIDs(assignees)
|
if !tb.HasMetadata() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if tb.MetadataResult == nil {
|
||||||
|
resolveInput := api.RepoResolveInput{
|
||||||
|
Reviewers: tb.Reviewers,
|
||||||
|
Assignees: tb.Assignees,
|
||||||
|
Labels: tb.Labels,
|
||||||
|
Projects: tb.Projects,
|
||||||
|
Milestones: tb.Milestones,
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
tb.MetadataResult, err = api.RepoResolveMetadataIDs(client, baseRepo, resolveInput)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assigneeIDs, err := tb.MetadataResult.MembersToIDs(tb.Assignees)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not assign user: %w", err)
|
return fmt.Errorf("could not assign user: %w", err)
|
||||||
}
|
}
|
||||||
params["assigneeIds"] = assigneeIDs
|
params["assigneeIds"] = assigneeIDs
|
||||||
|
|
||||||
labelIDs, err := metadata.LabelsToIDs(labelNames)
|
labelIDs, err := tb.MetadataResult.LabelsToIDs(tb.Labels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not add label: %w", err)
|
return fmt.Errorf("could not add label: %w", err)
|
||||||
}
|
}
|
||||||
params["labelIds"] = labelIDs
|
params["labelIds"] = labelIDs
|
||||||
|
|
||||||
projectIDs, err := metadata.ProjectsToIDs(projectNames)
|
projectIDs, err := tb.MetadataResult.ProjectsToIDs(tb.Projects)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not add to project: %w", err)
|
return fmt.Errorf("could not add to project: %w", err)
|
||||||
}
|
}
|
||||||
params["projectIds"] = projectIDs
|
params["projectIds"] = projectIDs
|
||||||
|
|
||||||
if len(milestoneTitles) > 0 {
|
if len(tb.Milestones) > 0 {
|
||||||
milestoneID, err := metadata.MilestoneToID(milestoneTitles[0])
|
milestoneID, err := tb.MetadataResult.MilestoneToID(tb.Milestones[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not add to milestone '%s': %w", milestoneTitles[0], err)
|
return fmt.Errorf("could not add to milestone '%s': %w", tb.Milestones[0], err)
|
||||||
}
|
}
|
||||||
params["milestoneId"] = milestoneID
|
params["milestoneId"] = milestoneID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(tb.Reviewers) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var userReviewers []string
|
||||||
|
var teamReviewers []string
|
||||||
|
for _, r := range tb.Reviewers {
|
||||||
|
if strings.ContainsRune(r, '/') {
|
||||||
|
teamReviewers = append(teamReviewers, r)
|
||||||
|
} else {
|
||||||
|
userReviewers = append(teamReviewers, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
userReviewerIDs, err := tb.MetadataResult.MembersToIDs(userReviewers)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not request reviewer: %w", err)
|
||||||
|
}
|
||||||
|
params["userReviewerIds"] = userReviewerIDs
|
||||||
|
|
||||||
|
teamReviewerIDs, err := tb.MetadataResult.TeamsToIDs(teamReviewers)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not request reviewer: %w", err)
|
||||||
|
}
|
||||||
|
params["teamReviewerIds"] = teamReviewerIDs
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -325,48 +325,9 @@ func prCreate(cmd *cobra.Command, _ []string) error {
|
||||||
"headRefName": headBranchLabel,
|
"headRefName": headBranchLabel,
|
||||||
}
|
}
|
||||||
|
|
||||||
if tb.HasMetadata() {
|
err = addMetadataToIssueParams(client, baseRepo, params, &tb)
|
||||||
if tb.MetadataResult == nil {
|
if err != nil {
|
||||||
resolveInput := api.RepoResolveInput{
|
return err
|
||||||
Reviewers: tb.Reviewers,
|
|
||||||
Assignees: tb.Assignees,
|
|
||||||
Labels: tb.Labels,
|
|
||||||
Projects: tb.Projects,
|
|
||||||
Milestones: tb.Milestones,
|
|
||||||
}
|
|
||||||
|
|
||||||
tb.MetadataResult, err = api.RepoResolveMetadataIDs(client, baseRepo, resolveInput)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = addMetadataToIssueParams(params, tb.MetadataResult, tb.Assignees, tb.Labels, tb.Projects, tb.Milestones)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
var userReviewers []string
|
|
||||||
var teamReviewers []string
|
|
||||||
for _, r := range tb.Reviewers {
|
|
||||||
if strings.ContainsRune(r, '/') {
|
|
||||||
teamReviewers = append(teamReviewers, r)
|
|
||||||
} else {
|
|
||||||
userReviewers = append(teamReviewers, r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
userReviewerIDs, err := tb.MetadataResult.MembersToIDs(userReviewers)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("could not request reviewer: %w", err)
|
|
||||||
}
|
|
||||||
params["userReviewerIds"] = userReviewerIDs
|
|
||||||
|
|
||||||
teamReviewerIDs, err := tb.MetadataResult.TeamsToIDs(teamReviewers)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("could not request reviewer: %w", err)
|
|
||||||
}
|
|
||||||
params["teamReviewerIds"] = teamReviewerIDs
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pr, err := api.CreatePullRequest(client, baseRepo, params)
|
pr, err := api.CreatePullRequest(client, baseRepo, params)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue