|
29 | 29 | bot_gitlab_merge_request_milestone_required, |
30 | 30 | bot_gitlab_merge_request_summary_enabled, |
31 | 31 | bot_gitlab_username, |
| 32 | + bot_gitlab_merge_request_reviewer_username, |
32 | 33 | ) |
33 | 34 | from src.i18n import _ |
34 | 35 | from src.llm import AI, ai_diffs_summary |
@@ -103,6 +104,29 @@ def check_email(commit_author_name, commit_author_email): |
103 | 104 | ) |
104 | 105 |
|
105 | 106 |
|
| 107 | +def has_required_reviewer(event_data): |
| 108 | + """Checks if the configured required reviewer is present in the merge request reviewers list.""" |
| 109 | + required_username = bot_gitlab_merge_request_reviewer_username |
| 110 | + if not required_username: |
| 111 | + # If no required username is configured, the check passes |
| 112 | + return True |
| 113 | + |
| 114 | + reviewers = [] |
| 115 | + event_type = event_data.get("event_type") |
| 116 | + |
| 117 | + if event_type == "merge_request": |
| 118 | + reviewers = event_data.get("reviewers", []) |
| 119 | + |
| 120 | + if not reviewers: |
| 121 | + return False |
| 122 | + |
| 123 | + for reviewer in reviewers: |
| 124 | + if reviewer.get("username") == required_username: |
| 125 | + return True |
| 126 | + |
| 127 | + return False |
| 128 | + |
| 129 | + |
106 | 130 | async def generate_diff_description_summary(event, gl): |
107 | 131 | project_id = event.project_id |
108 | 132 | description = event.data["object_attributes"]["description"] |
@@ -297,15 +321,24 @@ def has_ai_review_label(labels): |
297 | 321 |
|
298 | 322 | class MergeRequestHooks: |
299 | 323 | async def merge_request_opened_event(self, event, gl, *args, **kwargs): |
| 324 | + if not has_required_reviewer(event.data): |
| 325 | + logging.debug("Required reviewer not found. Skipping merge_request_opened_event.") |
| 326 | + return |
300 | 327 | await generate_diff_description_summary(event, gl) |
301 | 328 | await check_commit(event, gl) |
302 | 329 |
|
303 | 330 | async def merge_request_updated_event(self, event, gl, *args, **kwargs): |
| 331 | + if not has_required_reviewer(event.data): |
| 332 | + logging.debug("Required reviewer not found. Skipping merge_request_updated_event.") |
| 333 | + return |
304 | 334 | if is_opened_merge_request(event): |
305 | 335 | await generate_diff_description_summary(event, gl) |
306 | 336 | await check_commit(event, gl) |
307 | 337 |
|
308 | 338 | async def merge_request_reopen_event(self, event, gl, *args, **kwargs): |
| 339 | + if not has_required_reviewer(event.data): |
| 340 | + logging.debug("Required reviewer not found. Skipping merge_request_reopen_event.") |
| 341 | + return |
309 | 342 | await generate_diff_description_summary(event, gl) |
310 | 343 | await check_commit(event, gl) |
311 | 344 |
|
|
0 commit comments