feat: add slack reminder for open merge requests

This commit is contained in:
Karl-Philipp Wulfert
2019-01-30 14:32:05 +01:00
parent d75f9429ac
commit 47e977583b
3 changed files with 319 additions and 1 deletions

View File

@@ -13,11 +13,14 @@
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Api} from '@openstapps/gitlab-api';
import {MergeRequest} from '@openstapps/gitlab-api/lib/types';
import {Logger} from '@openstapps/logger';
import {WebClient} from '@slack/client';
import {asyncPool} from 'async-pool-native/dist/async-pool';
import * as commander from 'commander';
import {existsSync, readFileSync} from 'fs';
import {join} from 'path';
import {GITLAB_API_URL} from './configuration';
import {GITLAB_API_URL, GROUPS} from './configuration';
import {report} from './tasks/report';
import {tidy} from './tasks/tidy';
import {unlabel} from './tasks/unlabel';
@@ -63,6 +66,43 @@ commander
logger.ok('Done!');
});
commander
.command('remind')
.action(async () => {
const mergeRequests: MergeRequest[] =
await gitlabApi.makeGitLabAPIRequest(`groups/${GROUPS[0]}/merge_requests?state=opened`);
const client = new WebClient(process.env.SLACK_API_TOKEN);
await asyncPool(2, mergeRequests, async (mergeRequest) => {
if (mergeRequest.title.indexOf('WIP') !== 0) {
const config = await gitlabApi.makeGitLabAPIRequest(
`/projects/${mergeRequest.project_id}/merge_requests/${mergeRequest.iid}/approvals`,
);
if (config.merge_status === 'can_be_merged') {
if (config.approvals_left > 0) {
logger.warn(`Merge request '${mergeRequest.title}' needs more approvals!`);
await client.chat.postMessage({
channel: 'C762UG76Z',
text: `Merge request '${mergeRequest.title}' needs more approvals! See ${mergeRequest.web_url}!`,
});
} else {
logger.log(`Merge request '${mergeRequest.title}' is ready to be merged!`);
await client.chat.postMessage({
channel: 'C762UG76Z',
text: `Merge request '${mergeRequest.title}' is ready to be merged! See ${mergeRequest.web_url}!`,
});
}
}
} else {
logger.info(`Merge request '${mergeRequest.title}' is WIP.`);
}
});
});
commander
.parse(process.argv);