Skip to content

Commit 66ad484

Browse files
committed
feat: check reviewer username for merge requests
Adds a new optional configuration parameter to specify a required reviewer username for merge requests. If set, the bot validates that the specified reviewer in the `BOT_GITLAB_MERGE_REQUEST_REVIEWER_USERNAME` environment variable is present in the event data `reviewers` array before processing the merge request.
1 parent a005134 commit 66ad484

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-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: 34 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,7 +104,31 @@ 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):
131+
logging.debug("Event: ", event)
107132
project_id = event.project_id
108133
description = event.data["object_attributes"]["description"]
109134
labels = event.data["object_attributes"]["labels"]
@@ -297,15 +322,24 @@ def has_ai_review_label(labels):
297322

298323
class MergeRequestHooks:
299324
async def merge_request_opened_event(self, event, gl, *args, **kwargs):
325+
if not has_required_reviewer(event.data):
326+
logging.debug("Required reviewer not found. Skipping merge_request_opened_event.")
327+
return
300328
await generate_diff_description_summary(event, gl)
301329
await check_commit(event, gl)
302330

303331
async def merge_request_updated_event(self, event, gl, *args, **kwargs):
332+
if not has_required_reviewer(event.data):
333+
logging.debug("Required reviewer not found. Skipping merge_request_updated_event.")
334+
return
304335
if is_opened_merge_request(event):
305336
await generate_diff_description_summary(event, gl)
306337
await check_commit(event, gl)
307338

308339
async def merge_request_reopen_event(self, event, gl, *args, **kwargs):
340+
if not has_required_reviewer(event.data):
341+
logging.debug("Required reviewer not found. Skipping merge_request_reopen_event.")
342+
return
309343
await generate_diff_description_summary(event, gl)
310344
await check_commit(event, gl)
311345

0 commit comments

Comments
 (0)