From e02939c470ff9a63fb33c9754e06ea4dfbbd9b15 Mon Sep 17 00:00:00 2001 From: Karl-Philipp Wulfert Date: Mon, 25 Feb 2019 17:30:41 +0100 Subject: [PATCH] feat: adjust reminder for unfixed merge requests --- src/tasks/remind.ts | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/tasks/remind.ts b/src/tasks/remind.ts index 33eb7add..ebd0b704 100644 --- a/src/tasks/remind.ts +++ b/src/tasks/remind.ts @@ -10,7 +10,7 @@ import { import {WebClient} from '@slack/client'; import {asyncPool} from 'async-pool-native/dist/async-pool'; import {logger} from '../common'; -import {GROUPS} from '../configuration'; +import {GROUPS, NOTE_PREFIX} from '../configuration'; export async function remind(api: Api): Promise { // get list of open merge requests @@ -47,6 +47,34 @@ export async function remind(api: Api): Promise { // get merge request approval const approval = await api.getMergeRequestApproval(mergeRequest.project_id, mergeRequest.iid); + // get merge request discussions + const discussions = await api.getMergeRequestDiscussions(mergeRequest.project_id, mergeRequest.iid); + + // check if at least one of the discussions is unresolved + const hasUnresolvedDiscussions = discussions.some((discussion) => { + return discussion.notes.some((note) => { + return note.resolvable && !note.resolved; + }); + }); + + if (hasUnresolvedDiscussions) { + // send message to slack + await client.chat.postMessage({ + channel: 'C762UG76Z', + text: `Merge request '${mergeRequest.title}' has unresolved discussions! See ${mergeRequest.web_url}!`, + }); + + // create note in merge request + await api.createNote( + mergeRequest.project_id, + Scope.MERGE_REQUESTS, + mergeRequest.iid, + `${NOTE_PREFIX} Please resolve pending discussions, @${mergeRequest.author.username}!`, + ); + + return; + } + if (approval.merge_status === MergeRequestMergeStatus.CAN_BE_MERGED) { if (approval.approvals_left > 0) { logger.warn(`Merge request '${mergeRequest.title}' needs more approvals!`); @@ -76,7 +104,7 @@ export async function remind(api: Api): Promise { mergeRequest.project_id, Scope.MERGE_REQUESTS, mergeRequest.iid, - `Please review, ${possibleApprovers}!`, + `${NOTE_PREFIX} Please review, ${possibleApprovers}!`, ); } else { logger.log(`Merge request '${mergeRequest.title}' is ready to be merged!`); @@ -97,7 +125,7 @@ export async function remind(api: Api): Promise { mergeRequest.project_id, Scope.MERGE_REQUESTS, mergeRequest.iid, - `Merge request is ready to be merged, ${possibleMergers}!`, + `${NOTE_PREFIX} Merge request is ready to be merged, ${possibleMergers}!`, ); } }