From f5cd33b4bfe042a79cd6a712a001f2737305e60a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Tue, 8 Jun 2021 20:22:33 +0200 Subject: [PATCH 1/3] Fix showing Checks in `pr status` This was a regression in how `statusCheckRollup` is queried and stored. As a result, `gh pr status` did not include rendered information about checks related to each pull request. This switches the query builder to `PullRequestGraphQL()` to eliminate the outdated query. --- api/queries_pr.go | 64 ++++++++--------------------------------------- 1 file changed, 10 insertions(+), 54 deletions(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index 3032f6364..39ae729bb 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -531,67 +531,23 @@ func pullRequestFragment(httpClient *http.Client, hostname string) (string, erro return "", err } - var reviewsFragment string - if prFeatures.HasReviewDecision { - reviewsFragment = "reviewDecision" + fields := []string{ + "number", "title", "state", "url", "isDraft", "isCrossRepository", + "headRefName", "headRepositoryOwner", "mergeStateStatus", } - - var statusesFragment string if prFeatures.HasStatusCheckRollup { - statusesFragment = ` - commits(last: 1) { - nodes { - commit { - statusCheckRollup { - contexts(last: 100) { - nodes { - ...on StatusContext { - state - } - ...on CheckRun { - conclusion - status - } - } - } - } - } - } - } - ` + fields = append(fields, "statusCheckRollup") } - var requiresStrictStatusChecks string - if prFeatures.HasBranchProtectionRule { - requiresStrictStatusChecks = ` - baseRef { - branchProtectionRule { - requiresStrictStatusChecks - } - }` + var reviewFields []string + if prFeatures.HasReviewDecision { + reviewFields = append(reviewFields, "reviewDecision") } fragments := fmt.Sprintf(` - fragment pr on PullRequest { - number - title - state - url - headRefName - mergeStateStatus - headRepositoryOwner { - login - } - %s - isCrossRepository - isDraft - %s - } - fragment prWithReviews on PullRequest { - ...pr - %s - } - `, requiresStrictStatusChecks, statusesFragment, reviewsFragment) + fragment pr on PullRequest {%s} + fragment prWithReviews on PullRequest {...pr,%s} + `, PullRequestGraphQL(fields), PullRequestGraphQL(reviewFields)) return fragments, nil } From 885e94786aa02f50f3eb5eeb00c136f618e7a9fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 10 Jun 2021 15:37:58 +0200 Subject: [PATCH 2/3] Shorten GraphQL query for `pr status --json` --- api/queries_pr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index 39ae729bb..fd6117837 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -396,7 +396,7 @@ func PullRequestStatus(client *Client, repo ghrepo.Interface, options StatusOpti // these are always necessary to find the PR for the current branch fields.AddValues([]string{"isCrossRepository", "headRepositoryOwner", "headRefName"}) gr := PullRequestGraphQL(fields.ToSlice()) - fragments = fmt.Sprintf("fragment pr on PullRequest{%[1]s}fragment prWithReviews on PullRequest{%[1]s}", gr) + fragments = fmt.Sprintf("fragment pr on PullRequest{%s}fragment prWithReviews on PullRequest{...pr}", gr) } else { var err error fragments, err = pullRequestFragment(client.http, repo.RepoHost()) From a4d1ce77097ed3068592385712bd73ad9edc08c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 10 Jun 2021 15:51:27 +0200 Subject: [PATCH 3/3] Fix fetching information about the PR potentially being behind base branch --- api/queries_pr.go | 2 +- api/query_builder.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/api/queries_pr.go b/api/queries_pr.go index fd6117837..e21416b9f 100644 --- a/api/queries_pr.go +++ b/api/queries_pr.go @@ -533,7 +533,7 @@ func pullRequestFragment(httpClient *http.Client, hostname string) (string, erro fields := []string{ "number", "title", "state", "url", "isDraft", "isCrossRepository", - "headRefName", "headRepositoryOwner", "mergeStateStatus", + "requiresStrictStatusChecks", "headRefName", "headRepositoryOwner", "mergeStateStatus", } if prFeatures.HasStatusCheckRollup { fields = append(fields, "statusCheckRollup") diff --git a/api/query_builder.go b/api/query_builder.go index 3dc97b826..c9ab62d13 100644 --- a/api/query_builder.go +++ b/api/query_builder.go @@ -216,6 +216,8 @@ func PullRequestGraphQL(fields []string) string { q = append(q, `commits(last:1){nodes{commit{oid}}}`) case "commitsCount": // pseudo-field q = append(q, `commits{totalCount}`) + case "requiresStrictStatusChecks": // pseudo-field + q = append(q, `baseRef{branchProtectionRule{requiresStrictStatusChecks}}`) case "statusCheckRollup": q = append(q, StatusCheckRollupGraphQL("")) default: