Name: mention-bot
Owner: Deis
Description: Automatically mention potential reviewers on pull requests.
Forked from: facebook/mention-bot
Created: 2016-06-11 03:18:21.0
Updated: 2018-04-16 16:52:34.0
Pushed: 2017-03-07 17:23:01.0
Homepage: null
Size: 306
Language: JavaScript
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
Do you have a GitHub project that is too big for people to subscribe to all the notifications? The mention bot will automatically mention potential reviewers on pull requests. It helps getting faster turnaround on pull requests by involving the right people early on.
application/json
Pull Request
And you are done. Next time a pull request is opened, you should see the bot add a comment ;)
The bot can be configured by adding a .mention-bot
file to the base directory of the repo. Here's a list of the possible options:
axReviewers": 5, // Maximum number of people to ping in the PR message, default is 3
umFilesToCheck": 10, // Number of files to check against, default is 5
essage": "@pullRequester, thanks! @reviewers, please review this.",
// custom message using @pullRequester and @reviewers
lwaysNotifyForPaths": [
{
"name": "ghuser", // The user's Github username
"files": ["src/js/**/*.js"], // The array of file globs associated with the user
"skipTeamPrs": false // mention-bot will exclude the creator's own team from mentions
}
// Users will always be mentioned based on file glob
allbackNotifyForPaths": [
{
"name": "ghuser", // The user's Github username
"files": ["src/js/**/*.js"], // The array of file globs associated with the user
"skipTeamPrs": false // mention-bot will exclude the creator's own team from mentions
}
// Users will be mentioned based on file glob if no other user was found
indPotentialReviewers": true, // mention-bot will try to find potential reviewers based on files history, if disabled, `alwaysNotifyForPaths` is used instead
ileBlacklist": ["*.md"], // mention-bot will ignore any files that match these file globs
serBlacklist": [], // Users in this list will never be mentioned by mention-bot
serBlacklistForPR": [], // PR made by users in this list will be ignored
equiredOrgs": [], // mention-bot will only mention user who are a member of one of these organizations
ctions": ["opened"], // List of PR actions that mention-bot will listen to, default is "opened"
kipAlreadyAssignedPR": false, // mention-bot will ignore already assigned PR's
kipAlreadyMentionedPR": false, // mention-bot will ignore if there is already existing an exact mention
ssignToReviewer": false, // mention-bot assigns the most appropriate reviewer for PR
reateReviewRequest": false, // mention-bot creates review request for the most appropriate reviewer for PR
reateComment": true, // mention-bot creates a comment mentioning the reviewers for the PR
kipTitle": "", // mention-bot will ignore PR that includes text in the title,
ithLabel": "", // mention-bot will only consider PR's with this label. Must set actions to ["labeled"].
elayed": false, // mention-bot will wait to comment until specified time in `delayedUntil` value
elayedUntil": "3d", // Used if delayed is equal true, permitted values are: minutes, hours, or days, e.g.: '3 days', '40 minutes', '1 hour', '3d', '1h', '10m'
kipCollaboratorPR": false // mention-bot will ignore if PR is made by collaborator
The glob matching is an extended form of glob syntax performed by minimatch
, with the default options; read the minimatch
README for more details.
Note: The .mention-bot
file must be valid JSON.
The default config can be overridden via environment config. e.g.:
ION_BOT_CONFIG={"maxReviewers":1,"delayed":true}
Every time there's a new pull request, GitHub wakes up the mention bot using Webhooks.
Once awakened, the bot will download the diff of the pull request and figure out which files and lines have been touched.
For these, it will download the associated blame to figure out who last touched that line, as they may be a good reviewer.
After running the algorithm described in the next section, it will comment on the pull request notifying those people and go back to sleep.
The problem of finding who the best reviewers are is really hard and I don't think that any algorithm will achieve perfection. Instead, what we want here is to be best effort. We want to notify people that are likely going to be interested and be good reviewers. If we ping a few too many people that's not the end of the world neither if we don't ping the exact right person.
We use two heuristics:
Initialization
Create two empty hash map:
DeletedLines
for authors of deleted lines.AllLines
for authors of lines in the changed files.Filling the data structures
DeletedLines
map.AllLines
map.Since getting the blame information is sending an http request to GitHub it is pretty expensive. We first sort the files by number of deleted lines and only pick the top 5. Since we're only looking for 3 names and the algorithm is best effort, this greatly speeds up the algorithm in case of large pull requests for little loss in precision.
Putting it all together
AllLines
all the names that appear in both maps. We don't want to mention the same person twice.DeletedLines
with AllLines
If you want to use a different account for the bot, change the message or extend it with more functionalities, we've tried to make it super easy:
clone https://github.com/facebook/mention-bot.git
ention-bot
install
start
llow the instructions there
Alternatively, click the button below:
If you would like the mention-bot to function on private repositories, set the GITHUB_USER
and GITHUB_PASSWORD
environment variables. You must disable two-factor authentication or you will receive a console log like this: Login to ${USERNAME} failed
.
You can also set a REQUIRED_ORG
environment variable, so you don't have to configure it in each repository of your organization.
You can also build deploy it as a Docker image:
er build -t mention-bot .
er run -e GITHUB_USER="a" -p 5000:5000 mention-bot
If you want to change the default message, you can write your custom logic in message.js, or add 'message' in the .mention-bot configuration file.
If you want to run the bot on your GitHub Enterprise instance, add the GHE host and path prefix to the config section of package.json
fig": {
heHost": "github.my-GHE-enabled-company.com",
hePathPrefix": "/api/v3"
If you use http
protocol, the config section like this:
fig": {
heHost": "github.my-GHE-enabled-company.com",
hePathPrefix": "/api/v3",
heProtocol": "http",
hePort": 80
When you require mention-bot
you will get all the functions exposed by mention-bot.js
module. You are expected to manage your own server and also connection to the github repository.
install mention-bot github
API can be used like this:
mentionBot = require('mention-bot');
GitHubApi = require('github');
github = new GitHubApi({ version: '3.0.0' });
ub.authenticate({
pe: 'oauth',
ken: '...token...'
ionBot
uessOwnersForPullRequest(
'https://github.com/fbsamples/bot-testing', // repo
65, // pull request number
'mention-bot', // user that created the pull request
'master', // branch
{ maxReviewers: 3 }, // config
github
hen(function(users) {
// array with user names which should be included in review
console.log(users);
atch(function(err) {
console.error(err);
;
mention-bot is BSD-licensed. We also provide an additional patent grant.