Skip to content

Commit 2b8ced3

Browse files
🌱 Fixup: list GitHub check runs of MergeRequest.HeadSHA instead of Commit.SHA (#2333)
* Only ListCheckRuns and ListStatuses on PR HeadSHA Unsquashed commits are unlikely to have CheckRuns on Github. This change reduces the overall number of API queries for raw results Signed-off-by: Raghav Kaul <raghavkaul@google.com> * Add tests Signed-off-by: Raghav Kaul <raghavkaul@google.com> * gofumpt Signed-off-by: Raghav Kaul <raghavkaul@google.com> Signed-off-by: Raghav Kaul <raghavkaul@google.com> Co-authored-by: Azeem Shaikh <azeemshaikh38@gmail.com>
1 parent 53e9246 commit 2b8ced3

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

‎checks/raw/ci_tests.go‎

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ func CITests(c clients.RepoClient) (checker.CITestData, error) {
3636
prNos := make(map[string]int)
3737

3838
for i := range commits {
39-
commit := commits[i]
4039
pr := &commits[i].AssociatedMergeRequest
4140

4241
if pr.MergedAt.IsZero() {
@@ -45,19 +44,21 @@ func CITests(c clients.RepoClient) (checker.CITestData, error) {
4544

4645
prNos[pr.HeadSHA] = pr.Number
4746

48-
crs, err := c.ListCheckRunsForRef(commit.SHA)
49-
if err != nil {
50-
return checker.CITestData{}, sce.WithMessage(
51-
sce.ErrScorecardInternal,
52-
fmt.Sprintf("Client.Repositories.ListCheckRunsForRef: %v", err),
53-
)
54-
}
47+
// HeadSHA is the last commit before the merge. if squashing enabled,
48+
// multiple commit SHAs will map to a single HeadSHA
49+
if len(runs[pr.HeadSHA]) == 0 {
50+
crs, err := c.ListCheckRunsForRef(pr.HeadSHA)
51+
if err != nil {
52+
return checker.CITestData{}, sce.WithMessage(
53+
sce.ErrScorecardInternal,
54+
fmt.Sprintf("Client.Repositories.ListCheckRunsForRef: %v", err),
55+
)
56+
}
5557

56-
// Use HeadSHA instead of commit.SHA because GitHub repos that don't squash
57-
// PRs will only display check runs/statuses on last commit in a changeset
58-
runs[pr.HeadSHA] = append(runs[pr.HeadSHA], crs...)
58+
runs[pr.HeadSHA] = crs
59+
}
5960

60-
statuses, err := c.ListStatuses(commit.SHA)
61+
statuses, err := c.ListStatuses(pr.HeadSHA)
6162
if err != nil {
6263
return checker.CITestData{}, sce.WithMessage(
6364
sce.ErrScorecardInternal,

‎e2e/ci_tests_test.go‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,29 @@ var _ = Describe("E2E TEST:"+checks.CheckCITests, func() {
7777
Expect(scut.ValidateTestReturn(nil, "CI tests run", &expected, &result, &dl)).Should(BeTrue())
7878
Expect(repoClient.Close()).Should(BeNil())
7979
})
80+
It("Should return absence of CI tests in a repo with unsquashed merges", func() {
81+
dl := scut.TestDetailLogger{}
82+
repo, err := githubrepo.MakeGithubRepo("duo-labs/parliament")
83+
Expect(err).Should(BeNil())
84+
repoClient := githubrepo.CreateGithubRepoClient(context.Background(), logger)
85+
err = repoClient.InitRepo(repo, "1ead655ec85bdbe0739e4a4125ce36eb48a329bc")
86+
Expect(err).Should(BeNil())
87+
req := checker.CheckRequest{
88+
Ctx: context.Background(),
89+
RepoClient: repoClient,
90+
Repo: repo,
91+
Dlogger: &dl,
92+
}
93+
expected := scut.TestReturn{
94+
Error: nil,
95+
Score: checker.MinResultScore,
96+
NumberOfWarn: 0,
97+
NumberOfInfo: 0,
98+
NumberOfDebug: 12,
99+
}
100+
result := checks.CITests(&req)
101+
Expect(scut.ValidateTestReturn(nil, "CI tests run", &expected, &result, &dl)).Should(BeTrue())
102+
Expect(repoClient.Close()).Should(BeNil())
103+
})
80104
})
81105
})

0 commit comments

Comments
 (0)