Git Product home page Git Product logo

github-review-bot's Introduction

Github Review Bot

A Github bot helping you pick reviewers for Pull Requests

Intro

This simple bot will pick reviewers for you in a PR. You can summon him by writing something like @ghreviewbot assign frontend reviewers where the team name could be any team you configured. I'll respond with 2 randomly selected reviewers, one senior team member and one junior.

How it works

This bot is written in Go and requires mainly 3 things to work:

  • This repo's small api/webapp to be deployed on a server with some proper environment variables
  • A webhook that triggers on the issue_comment event in your Github repository's settings
  • A Github user (not your personal account about but one for the bot, preferably) to impersonate the bot

Here's what happens on a typical use of this bot:

  • A comment is written on an issue or PR of a GitHub repo which you configured to ping the bot via webhook.
  • GitHub creates a payload for the event and makes a POST request to the configured https://boturl/hooks/github from the webhook settings
  • The bot take over and make sure the event it got is of the issue_comment type and that it was created (not modified or deleted)
  • The bot matches the comment against a regex that checks if somebody really is asking him for reviewers
  • With the team name matched in the previous regex it looks for a team configured for that name, goes on if it found one or comments that it doesn't know that team otherwise
  • Now that it found the concerned team it selects one senior username and one junior username at random
  • With those two usernames is now calls the Github API using a personal token from the bot's Github account to create comment on the concerned issue or PR

There we go, a simple bot for narrow and simple use case.

Configuring

This bot requires to following environment variables to be in a .env at the root when developing or on you server configuration in production:

  • GITHUB_TOKEN: A personal access token to make Github API calls (usually from the bot account)
  • BOT_NAME: The name you want you bot to answer to (usually the bot's account username)
  • BOT_TEAM_<any-team-name>: The list of reviewers Github usernames that the bot will select from. Individual usernames separated by commas (,) and seniors separated from the juniors list by a pipe (|)

Next, you also need a webhook that looks a bit like the following screenshot on the repo you want your bot to be watching for comments:

Example Webhook

Deploying

This bot is easily deployable to Heroku either by using the button below or creating a new app in the dashboard and deploying this repo to it.

Deploy

Developing

To develop a new feature for this bot you can use a combination of:

  • Running this bot on your computer using make run & a filled in .env file.
  • Running ngrok and creating a webhook on a test repo with that ngrok url in it
  • Creating a test issue and commenting on it to test the bot answers
  • If no answers come in you can check the server logs of the API calls responses in the Github webhook settings page of your test repo

That equates to the following commands:

cat > .env <<EOF
>GITHUB_TOKEN=<a valid github personal token>
>BOT_NAME=<the name you want to bot to have>
>BOT_TEAM_SOMENAME=senior1,senior2|junior1,junior2,junior3,junior4
>EOF
make run
ngrok start 5000

Contributing

All contributions are welcomed and will be accepted in the form of pull requests or issues on this repo.

If you want to change how bot behaves in a major way without keeping backwards compatibility for the initial use case consider forking this repository and going from there.

License

See the LICENSE file.

github-review-bot's People

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.