@zekker6/slack-gitlab-mr-reminder
v1.4.0
Published
Send reminders about gitlab merge requests to slack
Readme
slack-gitlab-mr-reminder
This node module can be used to send slack reminders for overdue gitlab merge requests. Both WIP and Draft merge requests are detected (via title prefix or GitLab API draft field). The criteria for this can be configured, but default is that:
- WIP/Draft merge requests not updated for longer than 7 days.
- Normal merge requests not updated for longer than 0 days (24 hours).
Thresholds can be configured in days (legacy) or as duration strings (e.g. 2h, 30m, 1d6h30m) for sub-day precision.
Installation
npm install @zekker6/slack-gitlab-mr-reminder
Example - running as an application
Install the module globally
npm install -g @zekker6/slack-gitlab-mr-reminder
Call slack-gitlab-mr-reminder with a suitable yml config, gitlab access token and slack webhook. See example.yml for an example of config.
GITLAB_ACCESS_TOKEN='...' SLACK_WEBHOOK_URL='...' slack-gitlab-mr-reminder examples/config.yml
This will only run once and send a reminder. You will likely want to run this everyday for which a cron would be suitable:
0 9 * * * GITLAB_ACCESS_TOKEN='...' SLACK_WEBHOOK_URL='...' slack-gitlab-mr-reminder /absolute/path/to/config.yml
This will send out reminders every day at 9AM
Example - module
You may use the functionality as a module:
var SlackGitlabMRReminder = require('slack-gitlab-mr-reminder');
// Using day-based thresholds (legacy)
const reminder = new SlackGitlabMRReminder({
mr: {
wip_mr_days_threshold: 7,
normal_mr_days_threshold: Infinity,
},
slack: {
webhook_url: 'https://hooks.slack.com/services/...',
channel: 'merge-requests',
},
gitlab: {
access_token: '...',
group: 'mygroup'
}
});
// Using duration-based thresholds (supports sub-day precision)
const reminder2 = new SlackGitlabMRReminder({
mr: {
wip_mr_threshold: '1d12h',
normal_mr_threshold: '2h',
},
slack: {
webhook_url: 'https://hooks.slack.com/services/...',
channel: 'merge-requests',
},
gitlab: {
access_token: '...',
group: 'mygroup'
}
});
reminder.remind();Example - docker
Launch with cron
# To configure via config file
docker run -v config.yml:/opt/config.yml --rm zekker6/slack-gitlab-mr-reminder:{TAG}
# Configuration via env parameters
docker run -e ... --rm zekker6/slack-gitlab-mr-reminder:{TAG}One-time start
docker run --rm zekker6/slack-gitlab-mr-reminder:{TAG} remindSupported env variables:
|Var|Default|Description|
|---|---|---|
| REMINDER_CRON_SCHEDULE | '* * * * *' | Cron expression to configure reminder starts |
| REMINDER_CONFIG_PATH | /opt/config.yml | Path to mounted config file |
| GITLAB_ACCESS_TOKEN | None | Gitlab access token |
| GITLAB_GROUP | None | Gitlab group name |
| GITLAB_EXTERNAL_URL | None | Gitlab installation url |
| GITLAB_WIP_MR_DAYS_THRESHOLD | 7 | Value in days representing threshold of notifying about stale WIP/Draft MR |
| GITLAB_NORMAL_MR_DAYS_THRESHOLD | 0 | Value in days representing threshold of notifying about stale MR |
| GITLAB_WIP_MR_THRESHOLD | None | Duration string (e.g. 2h, 30m, 1d6h30m) for WIP/Draft MR threshold. Cannot be used together with GITLAB_WIP_MR_DAYS_THRESHOLD |
| GITLAB_NORMAL_MR_THRESHOLD | None | Duration string (e.g. 2h, 30m, 1d6h30m) for normal MR threshold. Cannot be used together with GITLAB_NORMAL_MR_DAYS_THRESHOLD |
| GITLAB_MR_DATE_FIELD | updated_at | Which MR date field to compare against. Either updated_at or created_at |
| SLACK_WEBHOOK_URL | None | Slack webhook to send notifications |
| SLACK_CHANNEL | None | Slack channel name |
Options
gitlab.group- The name of the group to watch for merge requests - Requiredgitlab.external_url- The url of the gitlab installation - Defaults to https://gitlab.com (the public gitlab)slack.channel- The slack channel to post to - Requiredslack.name- Name of the slack poster - Defaults toGitLab Reminderslack.message- Message to send at the top of the slack message - Defaults toMerge requests are overdue:mr.normal_mr_days_threshold- Number of days before a normal MR is considered overdue - Defaults to0mr.wip_mr_days_threshold- Number of days before a WIP/Draft MR is considered overdue - Defaults to7mr.normal_mr_threshold- Duration string (e.g.2h,30m,1d6h30m) before a normal MR is considered overdue. Cannot be used together withnormal_mr_days_thresholdmr.wip_mr_threshold- Duration string (e.g.2h,30m,1d6h30m) before a WIP/Draft MR is considered overdue. Cannot be used together withwip_mr_days_thresholdmr.mr_date_field- Which MR date field to compare against:updated_at(default) orcreated_at
It is possible to run app by using either config file or env variables. Browse examples in examples folder: here
