Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Review Reminder Bot

For an enhanced SaaS version, visit

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.


go get -u


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.


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"


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., 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


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.


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


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