Skip to content
πŸ€– A pull/merge-request reminder-bot for Gitlab and Github, posting on Mattermost or Slack.
Go
Branch: master
Clone or download

README.md

Review Reminder Bot

Build Status Go Report Card

review-bot sends a reminder message to Mattermost or Slack with all open pull/merge requests which need an approval. Well suitable for running as a cron-job, e.g. for daily reminders.

This tool is still beta. The usage with Gitlab and Mattermost is more mature while the Github and Slack usage is an early preview.

Installation

go get -u github.com/sj14/review-bot

Example

Sample Output for Gitlab and Mattermost

Project Name

How-To: Got reminded? Just normally review the given merge request with πŸ‘/πŸ‘Ž or use 😴 if you don't want to receive a reminder about this merge request.


Support SHIELD
1 πŸ’¬ 3 πŸ‘ @hulk

Ask Deadpool to join us
3 πŸ’¬ 3 πŸ‘ @batman

Repair the Helicarrier
3 πŸ’¬ @hulk @batman @groot @iron_man

Find Kingpin
2 πŸ’¬ 4 πŸ‘ You got all reviews, @daredevil.

Configuration

The reviewers.json file contains the gitlab/github user name as key and the mattermost name or slack user id as value.

Example 1: github/gitlab username and mattermost name

{
    "hulk51": "@hulk",
    "tonystark": "@iron_man",
    "groot": "@groot",
    "darkknight": "@batman",
    "lawyer": "@daredevil"
}

Example 2: github/gitlab username and slack id

{
    "hulk51": "@U024BE7LH",
    "tonystark": "U0G9QF9C6",
    "groot": "@U0JA38A",
    "darkknight": "@U0QM9L4",
    "lawyer": "@U0JMB8O1"
}

Running

Get all open merge requests from the Gitlab project owner/repo and post the resulting reminder to the specified Mattermost channel:

review-bot -host=$GITLAB_HOST -token=$GITLAB_API_TOKEN -repo=owner/repo -webhook=$WEBHOOK_ADDRESS -channel=$MATTERMOST_CHANNEL

Command Line Flags

  -channel string
        mattermost channel (e.g. MyChannel) or user (e.g. @AnyUser)
  -host string
        host address (e.g. github.com, gitlab.com or self-hosted gitlab url)
  -repo string
        repository (format: 'owner/repo'), or project id (only gitlab)
  -reviewers string
        path to the reviewers file (default "examples/reviewers.json")
  -template string
        path to the template file
  -token string
        host API token
  -webhook string
        slack/mattermost webhook URL

Templates

We use the Go template package for parsing. Depending on which backend you use, there are different fields you can use. Check the examples folder for a quick overview.

Gitlab

Accessing {{.Project}} gives you access to these fields.
While {{range .Reminders}} gives you access to {{.MR}} which is the merge request. {{.Missing}} is the Slack/Mattermost handle of the missing reviewer. {{.Discussions}} is the number of open discussion. {{.Owner}} is the Mattermost name of the assignee or otherwise the creator of the merge request. {{.Emojis}} is a map with the reacted emoji's and their count on this merge request.

The corresponding Go structs:

type data struct {
      Project   gitlab.Project
      Reminders []reminder
}

type reminder struct {
      MR          *gitlab.MergeRequest
      Missing     []string
      Discussions int
      Owner       string
      Emojis      map[string]int
}

Github

Accessing {{.Repository}} gives you access to these fields.
While {{range .Reminders}} gives you access to {{.PR}} which is the pull request. {{.Owner}} the Mattermost name of the PR creator or the Github login as fallback. {{.Missing}} is the Slack/Mattermost handle of the missing reviewer.

type data struct {
      Repository *github.Repository
      Reminders  []reminder
}

type reminder struct {
      PR          *github.PullRequest
      Missing     []string
      Owner       string
}
You can’t perform that action at this time.