Add support for Gitlab individual review notifications (#736)

* Add support for individual reviews

* Document support + add frontend support

* changelog

* Remove redundant checks
This commit is contained in:
Will Hunt 2023-05-18 11:52:19 +01:00 committed by GitHub
parent 698b0c13bb
commit af90e840e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 3 deletions

1
changelog.d/736.feature Normal file
View File

@ -0,0 +1 @@
Add support for notifying when a GitLab MR has a single review (rather than completed review).

View File

@ -48,6 +48,7 @@ the events marked as default below will be enabled. Otherwise, this is ignored.
- merge_request.open *
- merge_request.review.comments *
- merge_request.review *
- merge_request.review.individual
- push *
- release *
- release.created *

View File

@ -365,6 +365,18 @@ export class Bridge {
(c, data) => c.onMergeRequestReviewed(data),
);
this.bindHandlerToQueue<IGitLabWebhookMREvent, GitLabRepoConnection>(
"gitlab.merge_request.approval",
(data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace),
(c, data) => c.onMergeRequestIndividualReview(data),
);
this.bindHandlerToQueue<IGitLabWebhookMREvent, GitLabRepoConnection>(
"gitlab.merge_request.unapproval",
(data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace),
(c, data) => c.onMergeRequestIndividualReview(data),
);
this.bindHandlerToQueue<IGitLabWebhookMREvent, GitLabRepoConnection>(
"gitlab.merge_request.update",
(data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace),

View File

@ -70,6 +70,7 @@ type AllowedEventsNames =
"merge_request.close" |
"merge_request.merge" |
"merge_request.review" |
"merge_request.review.individual" |
"merge_request.ready_for_review" |
"merge_request.review.comments" |
`merge_request.${string}` |
@ -86,6 +87,7 @@ const AllowedEvents: AllowedEventsNames[] = [
"merge_request.close",
"merge_request.merge",
"merge_request.review",
"merge_request.review.individual",
"merge_request.ready_for_review",
"merge_request.review.comments",
"merge_request",
@ -806,10 +808,26 @@ ${data.description}`;
}
log.info(`onMergeRequestReviewed ${this.roomId} ${this.instance}/${this.path} ${event.object_attributes.iid}`);
this.validateMREvent(event);
if (event.object_attributes.action !== "approved" && event.object_attributes.action !== "unapproved") {
// Not interested.
this.debounceMergeRequestReview(
event.user,
event.object_attributes,
event.project,
{
commentCount: 0,
approved: "approved" === event.object_attributes.action,
skip: false,
}
);
}
public async onMergeRequestIndividualReview(event: IGitLabWebhookMREvent) {
if (this.hookFilter.shouldSkip('merge_request', 'merge_request.review.individual') || !this.matchesLabelFilter(event)) {
return;
}
log.info(`onMergeRequestReviewed ${this.roomId} ${this.instance}/${this.path} ${event.object_attributes.iid}`);
this.validateMREvent(event);
this.debounceMergeRequestReview(
event.user,
event.object_attributes,

View File

@ -97,7 +97,8 @@ const ConnectionConfiguration: FunctionComponent<ConnectionConfigurationProps<ne
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.open" onChange={toggleEnabledHook}>Opened</EventHookCheckbox>
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.close" onChange={toggleEnabledHook}>Closed</EventHookCheckbox>
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.merge" onChange={toggleEnabledHook}>Merged</EventHookCheckbox>
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.review" onChange={toggleEnabledHook}>Reviewed</EventHookCheckbox>
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.review" onChange={toggleEnabledHook}>Completed review</EventHookCheckbox>
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.review.individual" onChange={toggleEnabledHook}>Single review</EventHookCheckbox>
<EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.ready_for_review" onChange={toggleEnabledHook}>Ready for review</EventHookCheckbox>
</ul>
<EventHookCheckbox enabledHooks={enabledHooks} hookEventName="push" onChange={toggleEnabledHook}>Pushes</EventHookCheckbox>