Our team wants to be reminded via Slack about pending pull requests so we can have timely reviews and keep code moving through to production. There are two approaches with this bot:
- Set the bot to run at specific times (say, 10am and 3pm every day) and notify of all open Pull Requests.
- Set the bot to run in intervals (say, every hour), only alerting the channels when a PR has been sitting idle for a certain number of person-hours. This means the bot is noiser during hours when everyone is working, and quiets down as people end their day.
- Visit https://github.com/settings/tokens
- Click "Generate New Token"
- Select "repo" permissions
- Visit https://api.slack.com/custom-integrations/legacy-tokens
- Issue a token if one does not exist
cp sample-config.json config.json
Edit config.json
to match the needs of your team. Each key in the configuration defines a repo, the channel messages for the repo should be posted to, the reviewers responsible for that repo, and the period of inactivity to notify reviewers after.
The reviewers
key is a JSON array containing a github username, slack username, and timezone identifier for each reviewer.
There is optional support for bambooHR to determine who is out on any given day, and to not include them in consideration for who is available to review PRs
There are two main strategies for using the reviewbot. If you want to run it at specific times and get notified about all open pull requests, set hours_to_review
to 0
. If you want to run the bot throughout the day and get notified about idle pull requests, set hours_to_review
to a non-zero value.
{
"danielma/reviewbot": {
"room": "#reviewbot",
"bamboohr_subdomain": "mycompany",
"reviewers": [
{
"github": "danielma",
"slack": "dma",
"bamboohr": 1,
"timezone": "America/Los_Angeles"
},
{
"github": "contributor",
"slack": "dmas_evil_twin",
"bamboohr": 2,
"timezone": "America/New_York"
}
],
"hours_to_review": 6,
"work_days": [1, 2, 3, 4, 5]
}
}
Key | Description | Required | Default |
---|---|---|---|
room |
The slack room for reviewbot to post notifications in. This will usually start with a # . |
Yes | (none) |
bamboohr_subdomain |
The Bamboo HR subdomain for your organization. This is required for any integration with Bamboo HR to work. | No | (none) |
hours_to_review |
How many person-hours reviewbot should wait before sending a reminder about an idle pull request. For more info, look at the FAQ | Yes | (none) |
work_days |
An array of weekdays that the reviewbot should consider work days. 0 is Sunday. |
No | [1,2,3,4,5] |
Key | Description | Required | Default |
---|---|---|---|
github |
The reviewer's github login. | Yes | (none) |
slack |
The reviewer's slack login. Reviewbot specifically surrounds this login in : characters to display that reviewer's custom emoji. |
Yes | (none) |
bamboohr |
The reviewer's ID in your Bamboo HR organization. | No | (none) |
timezone |
The reviewer's timezone. | Yes | (none) |
git clone https://github.com/danielma/reviewbot
cd reviewbot
heroku apps:create NAME
heroku config:set \
GH_AUTH_TOKEN=abc-123 \
SLACK_TOKEN=xoxb-234 \
BAMBOOHR_API_KEY=1234 \
CONFIG="$(cat config.json)"
git push heroku
heroku addons:create scheduler:standard
heroku addons:open scheduler
heroku run rake remind
A person-hour is a single hour worth of work from one person. It's used to measure the amount of time that a group of people is working. For example, a 4 person team does 16 person-hours worth of work in the time it takes a clock to advance 4 hours. It's explained well in the wikipedia article.
My general formula is
(number of developers - 1) * (clock hours)
On a 4 person team where you don't want PRs sitting idle for more than 2 hours, this means setting hours_to_review
to 6
.
Copyright Daniel Ma, Licensed MIT