Skip to content

Commit 0f2a3b5

Browse files
committed
Approve pull request with no issue
1 parent c488f11 commit 0f2a3b5

2 files changed

Lines changed: 40 additions & 9 deletions

File tree

bot/code_review_bot/report/github.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import structlog
66

77
from code_review_bot.report.base import Reporter
8-
from code_review_bot.sources.github import GithubClient
8+
from code_review_bot.sources.github import GithubClient, ReviewEvent
99

1010
logger = structlog.get_logger(__name__)
1111

@@ -39,13 +39,20 @@ def publish(self, issues, revision, task_failures, notices, reviewers):
3939
if issue.is_publishable()
4040
and issue.analyzer.name not in self.analyzers_skipped
4141
]
42-
if not publishable_issues:
43-
logger.info("No publishable issue, nothing to do")
44-
return
4542

46-
message = f"{len(issues)} issues have been found in this revision"
43+
if publishable_issues:
44+
# Publish a review summarizing detected, unresolved and closed issues
45+
message = f"{len(issues)} issues have been found in this revision"
46+
event = ReviewEvent.RequestChanges
47+
else:
48+
# Simply approve the pull request
49+
logger.info("No publishable issue, approving the pull request")
50+
message = None
51+
event = ReviewEvent.Approve
4752

48-
# Publish a review summarizing detected, unresolved and closed issues
4953
self.github_client.publish_review(
50-
issues=issues, revision=revision, message=message
54+
issues=issues,
55+
revision=revision,
56+
message=message,
57+
event=event,
5158
)

bot/code_review_bot/sources/github.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,27 @@
44
# License, v. 2.0. If a copy of the MPL was not distributed with this
55
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
66

7+
import enum
8+
79
from github import Auth, GithubIntegration
810
from github.PullRequest import ReviewComment
911

1012
from code_review_bot import Issue
1113
from code_review_bot.revisions import GithubRevision
1214

1315

16+
class ReviewEvent(enum.Enum):
17+
"""
18+
Review action you want to perform.
19+
https://docs.github.com/en/rest/pulls/reviews?apiVersion=2022-11-28#create-a-review-for-a-pull-request--parameters
20+
"""
21+
22+
Pending = "PENDING"
23+
Approved = "APPROVE"
24+
RequestChanges = "REQUEST_CHANGES"
25+
Comment = "COMMENT"
26+
27+
1428
class GithubClient:
1529
def __init__(self, client_id: str, pem_key_path: str, installation_id: str):
1630
self.client_id = client_id
@@ -42,17 +56,27 @@ def _build_review_comment(self, issue):
4256
)
4357

4458
def publish_review(
45-
self, issues: list[Issue], revision: GithubRevision, message: str
59+
self,
60+
issues: list[Issue],
61+
revision: GithubRevision,
62+
event: ReviewEvent,
63+
message: str | None = None,
4664
):
4765
"""
4866
Publish a review from a list of publishable issues, requesting changes to the author.
4967
"""
5068
repo = self.api.get_repo(revision.repo_name)
5169
pull_request = repo.get_pull(revision.pull_number)
70+
71+
if message is None:
72+
assert (
73+
event == ReviewEvent.Approved
74+
), "Body can be left null only when approving a pull request"
75+
5276
pull_request.create_review(
5377
commit=repo.get_commit(revision.pull_head_sha),
5478
body=message,
5579
comments=[self._build_review_comment(issue) for issue in issues],
5680
# https://docs.github.com/en/rest/pulls/reviews?apiVersion=2022-11-28#create-a-review-for-a-pull-request
57-
event="REQUEST_CHANGES",
81+
event=event.value,
5882
)

0 commit comments

Comments
 (0)