Skip to content

Commit 6f898dc

Browse files
author
vilmibm
committed
share prForRun
1 parent e7fa99b commit 6f898dc

File tree

2 files changed

+69
-70
lines changed

2 files changed

+69
-70
lines changed

pkg/cmd/run/shared/shared.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,71 @@ func Symbol(cs *iostreams.ColorScheme, status Status, conclusion Conclusion) (st
270270

271271
return "-", cs.Yellow
272272
}
273+
274+
func PullRequestForRun(client *api.Client, repo ghrepo.Interface, run Run) (int, error) {
275+
type response struct {
276+
Repository struct {
277+
PullRequests struct {
278+
Nodes []struct {
279+
Number int
280+
HeadRepository struct {
281+
Owner struct {
282+
Login string
283+
}
284+
Name string
285+
}
286+
}
287+
}
288+
}
289+
Number int
290+
}
291+
292+
variables := map[string]interface{}{
293+
"owner": repo.RepoOwner(),
294+
"repo": repo.RepoName(),
295+
"headRefName": run.HeadBranch,
296+
}
297+
298+
query := `
299+
query PullRequestForRun($owner: String!, $repo: String!, $headRefName: String!) {
300+
repository(owner: $owner, name: $repo) {
301+
pullRequests(headRefName: $headRefName, first: 1, orderBy: { field: CREATED_AT, direction: DESC }) {
302+
nodes {
303+
number
304+
headRepository {
305+
owner {
306+
login
307+
}
308+
name
309+
}
310+
}
311+
}
312+
}
313+
}`
314+
315+
var resp response
316+
317+
err := client.GraphQL(repo.RepoHost(), query, variables, &resp)
318+
if err != nil {
319+
return -1, err
320+
}
321+
322+
prs := resp.Repository.PullRequests.Nodes
323+
if len(prs) == 0 {
324+
return -1, fmt.Errorf("no matching PR found for %s", run.HeadBranch)
325+
}
326+
327+
number := -1
328+
329+
for _, pr := range prs {
330+
if pr.HeadRepository.Owner.Login == run.HeadRepository.Owner.Login && pr.HeadRepository.Name == run.HeadRepository.Name {
331+
number = pr.Number
332+
}
333+
}
334+
335+
if number == -1 {
336+
return number, fmt.Errorf("no matching PR found for %s", run.HeadBranch)
337+
}
338+
339+
return number, nil
340+
}

pkg/cmd/run/view/view.go

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func runView(opts *ViewOptions) error {
107107
}
108108

109109
prNumber := ""
110-
number, err := prForRun(client, repo, *run)
110+
number, err := shared.PullRequestForRun(client, repo, *run)
111111
if err == nil {
112112
prNumber = fmt.Sprintf(" #%d", number)
113113
}
@@ -165,7 +165,6 @@ func runView(opts *ViewOptions) error {
165165
fmt.Fprintln(out)
166166
fmt.Fprintln(out, cs.Bold("ANNOTATIONS"))
167167
fmt.Fprintln(out, shared.RenderAnnotations(cs, annotations))
168-
169168
}
170169

171170
fmt.Fprintln(out)
@@ -178,71 +177,3 @@ func runView(opts *ViewOptions) error {
178177

179178
return nil
180179
}
181-
182-
func prForRun(client *api.Client, repo ghrepo.Interface, run shared.Run) (int, error) {
183-
type response struct {
184-
Repository struct {
185-
PullRequests struct {
186-
Nodes []struct {
187-
Number int
188-
HeadRepository struct {
189-
Owner struct {
190-
Login string
191-
}
192-
Name string
193-
}
194-
}
195-
}
196-
}
197-
Number int
198-
}
199-
200-
variables := map[string]interface{}{
201-
"owner": repo.RepoOwner(),
202-
"repo": repo.RepoName(),
203-
"headRefName": run.HeadBranch,
204-
}
205-
206-
query := `
207-
query PullRequestForRun($owner: String!, $repo: String!, $headRefName: String!) {
208-
repository(owner: $owner, name: $repo) {
209-
pullRequests(headRefName: $headRefName, first: 1, orderBy: { field: CREATED_AT, direction: DESC }) {
210-
nodes {
211-
number
212-
headRepository {
213-
owner {
214-
login
215-
}
216-
name
217-
}
218-
}
219-
}
220-
}
221-
}`
222-
223-
var resp response
224-
225-
err := client.GraphQL(repo.RepoHost(), query, variables, &resp)
226-
if err != nil {
227-
return -1, err
228-
}
229-
230-
prs := resp.Repository.PullRequests.Nodes
231-
if len(prs) == 0 {
232-
return -1, fmt.Errorf("no matching PR found for %s", run.HeadBranch)
233-
}
234-
235-
number := -1
236-
237-
for _, pr := range prs {
238-
if pr.HeadRepository.Owner.Login == run.HeadRepository.Owner.Login && pr.HeadRepository.Name == run.HeadRepository.Name {
239-
number = pr.Number
240-
}
241-
}
242-
243-
if number == -1 {
244-
return number, fmt.Errorf("no matching PR found for %s", run.HeadBranch)
245-
}
246-
247-
return number, nil
248-
}

0 commit comments

Comments
 (0)