Home · RSS · E-Mail · GitHub · GitLab · Mastodon · Twitter · LinkedIn

Introducing Review-Bot

first published:

» Introduction

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

1
go install 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

1
2
3
4
5
6
7
{
    "hulk51": "@hulk",
    "tonystark": "@iron_man",
    "groot": "@groot",
    "darkknight": "@batman",
    "lawyer": "@daredevil"
}

Example 2: github/gitlab username and slack id

1
2
3
4
5
6
7
{
    "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:

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

» Command Line Flags

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  -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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
type data struct {
      Repository *github.Repository
      Reminders  []reminder
}

type reminder struct {
      PR          *github.PullRequest
      Missing     []string
      Owner       string
}



Home · RSS · E-Mail · GitHub · GitLab · Mastodon · Twitter · LinkedIn