Skip to content

Commit 53319e4

Browse files
authored
Merge pull request #16 from francovp/feat-merge-request-only-with-reviewer
feat: check reviewer username for merge requests
2 parents a005134 + 873d2b9 commit 53319e4

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ In GitLab, it is necessary to set a milestone when creating a merge request. By
164164
165165
Merge requests can only be merged if the source branch is associated with an existing issue. By default, this requirement is disabled.
166166
167+
**`BOT_GITLAB_MERGE_REQUEST_REVIEWER_USERNAME`**
168+
169+
This parameter specifies the username of a required reviewer for merge requests. If set, merge requests will only be processed by the bot if a reviewer with this username is assigned. If not set, this check is skipped.
170+
167171
**`OPENAI_API_BASE` / `OPENAI_API_KEY` / `OPENAI_API_MODEL`**
168172
169173
These parameters are used to connect the OPENAI model.

src/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,5 @@
157157
).lower()
158158
== "true"
159159
)
160+
161+
bot_gitlab_merge_request_reviewer_username = os.getenv("BOT_GITLAB_MERGE_REQUEST_REVIEWER_USERNAME", None)

src/merge_request_hook.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
bot_gitlab_merge_request_milestone_required,
3030
bot_gitlab_merge_request_summary_enabled,
3131
bot_gitlab_username,
32+
bot_gitlab_merge_request_reviewer_username,
3233
)
3334
from src.i18n import _
3435
from src.llm import AI, ai_diffs_summary
@@ -103,6 +104,29 @@ def check_email(commit_author_name, commit_author_email):
103104
)
104105

105106

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+
106130
async def generate_diff_description_summary(event, gl):
107131
project_id = event.project_id
108132
description = event.data["object_attributes"]["description"]
@@ -297,15 +321,24 @@ def has_ai_review_label(labels):
297321

298322
class MergeRequestHooks:
299323
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
300327
await generate_diff_description_summary(event, gl)
301328
await check_commit(event, gl)
302329

303330
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
304334
if is_opened_merge_request(event):
305335
await generate_diff_description_summary(event, gl)
306336
await check_commit(event, gl)
307337

308338
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
309342
await generate_diff_description_summary(event, gl)
310343
await check_commit(event, gl)
311344

0 commit comments

Comments
 (0)