5

Introducing Review-Bot

 3 years ago
source link: https://sj14.gitlab.io/post/2019/05-29-review-bot/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
2019-05-29

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

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:

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:

 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
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK