RFR: 1706: Store github checks in PR unique way
Erik Joelsson
erikj at openjdk.org
Thu Feb 9 22:11:39 UTC 2023
On Thu, 9 Feb 2023 19:13:37 GMT, Zhao Song <zsong at openjdk.org> wrote:
> Currently, checks in GitHub are stored in the commit. So if multiple PRs share the same source commit, then they will compete with the check-runs and store their different checksum in there. This in turn means that all, or most of those PRs will always think the check is outdated when a CheckRun is performed next.
>
> This patch adds repository name and pull request id to the name of check in Github. Therefore, even if multiple PRs share the same source commit, every PR will store a unique check in the commit and there is no competition exists.
bots/pr/src/main/java/org/openjdk/skara/bots/pr/CheckWorkItem.java line 123:
> 121: var metadata = getMetadata(censusInstance, pr.title(), pr.body(), comments, reviews, labels, pr.targetRef(), pr.isDraft(), null);
> 122: var currentChecks = pr.checks(hash);
> 123: var jcheckName = pr.repository().forge().name().equals("GitHub") ? "jcheck" + pr.repository().name() + pr.id() : "jcheck";
The generation of the name needs to be handled in one place. Possibly a static method on CheckRun or CheckWorkItem, or maybe CheckablePullrequest. I would also suggest some delimiters, something like `jcheck-repo#pull` (if # is a valid character, otherwise just dash).
The check is created in CheckRun, so the name needs to be changed there too.
bots/pr/src/main/java/org/openjdk/skara/bots/pr/IntegrateCommand.java line 64:
> 62: final var outdated = "the status check `" + checkName + "` has not been performed on commit %s yet";
> 63:
> 64: checkName = checkName.equals("jcheck") && pr.repository().forge().name().equals("GitHub") ?
There is just one caller of this method, which explicitly calls with `"jcheck"`. The caller should generate the new check name instead of rewriting it here.
forge/src/main/java/org/openjdk/skara/forge/github/GitHubPullRequest.java line 464:
> 462: public void updateCheck(Check check) {
> 463: var completedQuery = JSON.object();
> 464: completedQuery.put("name", check.name().equals("jcheck") ? check.name() + repository().name() + id() : check.name());
I don't understand this change. Why would we need that? I don't think GitHubPullRequest should be changing check names.
-------------
PR: https://git.openjdk.org/skara/pull/1470
More information about the skara-dev
mailing list