Skip to content

Commit 9d1ff9d

Browse files
authored
Merge pull request #27 from teams-notifier/feat-reset-approval-on-new-commits
feat: remove approvals on new commits/push…
2 parents eb7fb80 + cd9d998 commit 9d1ff9d

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

app.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ async def handle_webhook(
9393
x_conversation_token: Annotated[str, Header()],
9494
x_gitlab_token: Annotated[str, Header()],
9595
filter_on_participant_ids: str | None = None,
96+
new_commits_revoke_approvals: bool = True,
9697
):
9798
validate_gitlab_token(x_gitlab_token)
9899
conversation_tokens = list(
@@ -114,7 +115,12 @@ async def handle_webhook(
114115
detail="filter_on_participant_ids must be a list of comma separated integers",
115116
)
116117

117-
await webhook.merge_request(payload, conversation_tokens, participant_ids_filter)
118+
await webhook.merge_request(
119+
payload,
120+
conversation_tokens,
121+
participant_ids_filter,
122+
new_commits_revoke_approvals,
123+
)
118124
if isinstance(payload, PipelinePayload):
119125
await webhook.pipeline(payload, conversation_tokens)
120126
if isinstance(payload, EmojiPayload):

gitlab_model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class GLMRAttributes(BaseModel, extra="allow"):
3737
url: str
3838
action: str
3939
updated_at: str | None
40+
oldrev: str | None = None
4041

4142
# https://docs.gitlab.com/ee/api/merge_requests.html#merge-status
4243
detailed_merge_status: str # mergeable, not_approved

webhook/merge_request.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ async def merge_request(
142142
mr: MergeRequestPayload,
143143
conversation_tokens: list[str],
144144
participant_ids_filter: list[int],
145+
new_commits_revoke_approvals: bool,
145146
):
146147
payload_fingerprint = hashlib.sha256(mr.model_dump_json().encode("utf8")).hexdigest()
147148
logger.debug("payload fingerprint: %s", payload_fingerprint)
@@ -176,6 +177,22 @@ async def merge_request(
176177
if row is not None:
177178
mri.merge_request_extra_state = row["merge_request_extra_state"]
178179

180+
# If update and oldrev field is set => new commit in MR
181+
# Approvals must be reset
182+
if new_commits_revoke_approvals and mr.object_attributes.oldrev:
183+
row = await connection.fetchrow(
184+
"""UPDATE merge_request_ref
185+
SET merge_request_extra_state = jsonb_set(merge_request_extra_state, $1, $2::jsonb)
186+
WHERE merge_request_ref_id = $3
187+
RETURNING merge_request_extra_state""",
188+
["approvers"],
189+
{},
190+
mri.merge_request_ref_id,
191+
)
192+
print(mri.merge_request_ref_id)
193+
if row is not None:
194+
mri.merge_request_extra_state = row["merge_request_extra_state"]
195+
179196
# if it's a transition from draft to ready
180197
# - Delete all messages related to this MR prior to the current event update
181198
# then create_or_update_message will re-post new message

0 commit comments

Comments
 (0)