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.open *
- merge_request.review.comments * - merge_request.review.comments *
- merge_request.review * - merge_request.review *
- merge_request.review.individual
- push * - push *
- release * - release *
- release.created * - release.created *

View File

@ -365,6 +365,18 @@ export class Bridge {
(c, data) => c.onMergeRequestReviewed(data), (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>( this.bindHandlerToQueue<IGitLabWebhookMREvent, GitLabRepoConnection>(
"gitlab.merge_request.update", "gitlab.merge_request.update",
(data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace), (data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace),

View File

@ -70,6 +70,7 @@ type AllowedEventsNames =
"merge_request.close" | "merge_request.close" |
"merge_request.merge" | "merge_request.merge" |
"merge_request.review" | "merge_request.review" |
"merge_request.review.individual" |
"merge_request.ready_for_review" | "merge_request.ready_for_review" |
"merge_request.review.comments" | "merge_request.review.comments" |
`merge_request.${string}` | `merge_request.${string}` |
@ -86,6 +87,7 @@ const AllowedEvents: AllowedEventsNames[] = [
"merge_request.close", "merge_request.close",
"merge_request.merge", "merge_request.merge",
"merge_request.review", "merge_request.review",
"merge_request.review.individual",
"merge_request.ready_for_review", "merge_request.ready_for_review",
"merge_request.review.comments", "merge_request.review.comments",
"merge_request", "merge_request",
@ -806,10 +808,26 @@ ${data.description}`;
} }
log.info(`onMergeRequestReviewed ${this.roomId} ${this.instance}/${this.path} ${event.object_attributes.iid}`); log.info(`onMergeRequestReviewed ${this.roomId} ${this.instance}/${this.path} ${event.object_attributes.iid}`);
this.validateMREvent(event); this.validateMREvent(event);
if (event.object_attributes.action !== "approved" && event.object_attributes.action !== "unapproved") { this.debounceMergeRequestReview(
// Not interested. 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; return;
} }
log.info(`onMergeRequestReviewed ${this.roomId} ${this.instance}/${this.path} ${event.object_attributes.iid}`);
this.validateMREvent(event);
this.debounceMergeRequestReview( this.debounceMergeRequestReview(
event.user, event.user,
event.object_attributes, 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.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.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.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> <EventHookCheckbox enabledHooks={enabledHooks} parentEvent="merge_request" hookEventName="merge_request.ready_for_review" onChange={toggleEnabledHook}>Ready for review</EventHookCheckbox>
</ul> </ul>
<EventHookCheckbox enabledHooks={enabledHooks} hookEventName="push" onChange={toggleEnabledHook}>Pushes</EventHookCheckbox> <EventHookCheckbox enabledHooks={enabledHooks} hookEventName="push" onChange={toggleEnabledHook}>Pushes</EventHookCheckbox>