Skip to content

πŸ€– A pull/merge-request reminder-bot for Gitlab and Github, posting on Mattermost or Slack.

License

Notifications You must be signed in to change notification settings

sj14/review-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Review Reminder Bot

For an enhanced SaaS version, visit https://www.review-bot.com/


Action 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

Precompiled Binaries

See the releases page for precompiled binaries.

Manually

It's also possible to install the latest release with go install:

go install github.com/sj14/review-bot

Example

Sample Output for Gitlab and Mattermost

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
}