diff --git a/changelog.d/736.feature b/changelog.d/736.feature new file mode 100644 index 00000000..eb4dffd3 --- /dev/null +++ b/changelog.d/736.feature @@ -0,0 +1 @@ +Add support for notifying when a GitLab MR has a single review (rather than completed review). \ No newline at end of file diff --git a/docs/usage/room_configuration/gitlab_project.md b/docs/usage/room_configuration/gitlab_project.md index c7612a9d..0201ab3b 100644 --- a/docs/usage/room_configuration/gitlab_project.md +++ b/docs/usage/room_configuration/gitlab_project.md @@ -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 * diff --git a/src/Bridge.ts b/src/Bridge.ts index b7c22698..10511452 100644 --- a/src/Bridge.ts +++ b/src/Bridge.ts @@ -365,6 +365,18 @@ export class Bridge { (c, data) => c.onMergeRequestReviewed(data), ); + this.bindHandlerToQueue( + "gitlab.merge_request.approval", + (data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace), + (c, data) => c.onMergeRequestIndividualReview(data), + ); + + this.bindHandlerToQueue( + "gitlab.merge_request.unapproval", + (data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace), + (c, data) => c.onMergeRequestIndividualReview(data), + ); + this.bindHandlerToQueue( "gitlab.merge_request.update", (data) => connManager.getConnectionsForGitLabRepo(data.project.path_with_namespace), diff --git a/src/Connections/GitlabRepo.ts b/src/Connections/GitlabRepo.ts index 53cbb572..3142a585 100644 --- a/src/Connections/GitlabRepo.ts +++ b/src/Connections/GitlabRepo.ts @@ -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, diff --git a/web/components/roomConfig/GitlabRepoConfig.tsx b/web/components/roomConfig/GitlabRepoConfig.tsx index 084b0068..02be6e3f 100644 --- a/web/components/roomConfig/GitlabRepoConfig.tsx +++ b/web/components/roomConfig/GitlabRepoConfig.tsx @@ -97,7 +97,8 @@ const ConnectionConfiguration: FunctionComponentOpened Closed Merged - Reviewed + Completed review + Single review Ready for review Pushes