From 6f898dcbb32a3c16d0f9fa1c5d62bce2ee5e8acb Mon Sep 17 00:00:00 2001 From: vilmibm Date: Mon, 29 Mar 2021 16:37:42 -0500 Subject: [PATCH] share prForRun --- pkg/cmd/run/shared/shared.go | 68 ++++++++++++++++++++++++++++++++++ pkg/cmd/run/view/view.go | 71 +----------------------------------- 2 files changed, 69 insertions(+), 70 deletions(-) diff --git a/pkg/cmd/run/shared/shared.go b/pkg/cmd/run/shared/shared.go index d3ca228c1..cd39869e9 100644 --- a/pkg/cmd/run/shared/shared.go +++ b/pkg/cmd/run/shared/shared.go @@ -270,3 +270,71 @@ func Symbol(cs *iostreams.ColorScheme, status Status, conclusion Conclusion) (st return "-", cs.Yellow } + +func PullRequestForRun(client *api.Client, repo ghrepo.Interface, run Run) (int, error) { + type response struct { + Repository struct { + PullRequests struct { + Nodes []struct { + Number int + HeadRepository struct { + Owner struct { + Login string + } + Name string + } + } + } + } + Number int + } + + variables := map[string]interface{}{ + "owner": repo.RepoOwner(), + "repo": repo.RepoName(), + "headRefName": run.HeadBranch, + } + + query := ` + query PullRequestForRun($owner: String!, $repo: String!, $headRefName: String!) { + repository(owner: $owner, name: $repo) { + pullRequests(headRefName: $headRefName, first: 1, orderBy: { field: CREATED_AT, direction: DESC }) { + nodes { + number + headRepository { + owner { + login + } + name + } + } + } + } + }` + + var resp response + + err := client.GraphQL(repo.RepoHost(), query, variables, &resp) + if err != nil { + return -1, err + } + + prs := resp.Repository.PullRequests.Nodes + if len(prs) == 0 { + return -1, fmt.Errorf("no matching PR found for %s", run.HeadBranch) + } + + number := -1 + + for _, pr := range prs { + if pr.HeadRepository.Owner.Login == run.HeadRepository.Owner.Login && pr.HeadRepository.Name == run.HeadRepository.Name { + number = pr.Number + } + } + + if number == -1 { + return number, fmt.Errorf("no matching PR found for %s", run.HeadBranch) + } + + return number, nil +} diff --git a/pkg/cmd/run/view/view.go b/pkg/cmd/run/view/view.go index 078ff23c3..e3e08a7b8 100644 --- a/pkg/cmd/run/view/view.go +++ b/pkg/cmd/run/view/view.go @@ -107,7 +107,7 @@ func runView(opts *ViewOptions) error { } prNumber := "" - number, err := prForRun(client, repo, *run) + number, err := shared.PullRequestForRun(client, repo, *run) if err == nil { prNumber = fmt.Sprintf(" #%d", number) } @@ -165,7 +165,6 @@ func runView(opts *ViewOptions) error { fmt.Fprintln(out) fmt.Fprintln(out, cs.Bold("ANNOTATIONS")) fmt.Fprintln(out, shared.RenderAnnotations(cs, annotations)) - } fmt.Fprintln(out) @@ -178,71 +177,3 @@ func runView(opts *ViewOptions) error { return nil } - -func prForRun(client *api.Client, repo ghrepo.Interface, run shared.Run) (int, error) { - type response struct { - Repository struct { - PullRequests struct { - Nodes []struct { - Number int - HeadRepository struct { - Owner struct { - Login string - } - Name string - } - } - } - } - Number int - } - - variables := map[string]interface{}{ - "owner": repo.RepoOwner(), - "repo": repo.RepoName(), - "headRefName": run.HeadBranch, - } - - query := ` - query PullRequestForRun($owner: String!, $repo: String!, $headRefName: String!) { - repository(owner: $owner, name: $repo) { - pullRequests(headRefName: $headRefName, first: 1, orderBy: { field: CREATED_AT, direction: DESC }) { - nodes { - number - headRepository { - owner { - login - } - name - } - } - } - } - }` - - var resp response - - err := client.GraphQL(repo.RepoHost(), query, variables, &resp) - if err != nil { - return -1, err - } - - prs := resp.Repository.PullRequests.Nodes - if len(prs) == 0 { - return -1, fmt.Errorf("no matching PR found for %s", run.HeadBranch) - } - - number := -1 - - for _, pr := range prs { - if pr.HeadRepository.Owner.Login == run.HeadRepository.Owner.Login && pr.HeadRepository.Name == run.HeadRepository.Name { - number = pr.Number - } - } - - if number == -1 { - return number, fmt.Errorf("no matching PR found for %s", run.HeadBranch) - } - - return number, nil -}