heythere - a robot to automate GitHub issue comments24 Mar 2016 ruby peer-review review robot
GitHub issues are great for humans to correspond over software, or any other project. At rOpenSci we use an issue based software review system (ropensci/onboarding). Software authors and reviewers go back and forth on the software, making a better product in the end.
We have a relatively small number of pieces of software under review at any one time compared to e.g., scientific journals - however, even with the small number, we as organizers, and authors and reviewers can forget things. For example:
- an organizer can forget to remind a reviewer to get a review in
- a reviewer can forget about a review, and may benefit from a friendly reminder
- an author may forget about updating software based on the review
As we are managing more package submissions through our system, automated things done by machine, or robot, will be increasingly helpful to keep the system moving smoothly.
A big red flag with automated systems is the annoyance factor. We can try to be smart about this and only remind people when it’s really needed.
I’ve been working on a thing for a while now, it’s called
heythere. It’s a Ruby application that is currently set up to run on Heroku, though you could run it anywhere you want. It’s running right now once per day to check to see if it should send any reminders to organizers, authors, reviewers.
heythere on GitHub: ropenscilabs/heythere
How it works
heythere is controlled through a series of environment variables that controls GitHub authentication, the first day post reviewer assignment when a reminder should be sent, how many days after reviews are submitted to ask if the author needs any help, and more. Check out the repo for all the env var options.
The Ruby app can be run via a rake task from the command line, or triggered with a scheduler on something like Heroku.
When the app runs, we look for environment variables that you set. If we don’t find them we use sensible defaults.
Using the env vars, we grab the issues for the repository you chose, limit to a subset of your choosing based on a series of labels, then compare dates on comments compared to your env vars, and either skip or send of comments on issues.
We use ockokit under the hood to work with GitHub issues.
How to use it
git clone email@example.com:ropenscilabs/heythere.git cd heythere
Change the repo in
Rakefile to whatever your repository is.
Heythere.hey_there(repo = 'ropensci/onboarding')
Create the app (use a different name, of course)
heroku apps:create ropensci-hey-there
Add the repository that you are targeting:
heroku config:add HEYTHERE_REPOSITORY=<github-repository> (like `owner/repo`)
Create a GitHub personal access token just for this application. You’ll need to set a env var for your username and the token. We read these in the app.
heroku config:add GITHUB_USERNAME=<github-user> heroku config:add GITHUB_PAT_OCTOKIT=<github-pat-for-octokit>
Optionally, set env vars for various options. You don’t have to set these - we’ll use defaults
heroku config:add HEYTHERE_PRE_DEADLINE_DAYS=<number-of-days-integer> heroku config:add HEYTHERE_DEADLINE_DAYS=<number-of-days-integer> heroku config:add HEYTHERE_POST_DEADLINE_EVERY_DAYS=<number-of-days-integer> heroku config:add HEYTHERE_POST_REVIEW_IN_DAYS=<number-of-days-integer> heroku config:add HEYTHERE_POST_REVIEW_TOGGLE=<boolean> heroku config:add HEYTHERE_BOT_NICKNAME=<string>
Also save all these env vars in your
.zshrc, or similar so you can run the app locally. E.g. with entries like
You can see all your Heroku config vars using
heroku config or use
Push your app to Heroku
git push heroku master
Add the scheduler to your heroku app
heroku addons:create scheduler:standard heroku addons:open scheduler
Add the task
rake hey to your heroku scheduler and set to whatever schedule you want.
If you have your repo in an env var as above, run the rake task
If not, then pass the repo to
rake hey repo=owner/repo
what does it look like?
This is what a comment looks like in a thread
You could set up a different GitHub account as your robot so it’s clearly not coming from a real person.
I’ll continue to improve
heythere as we get feedback on its use in
ropensci/onboarding. Would also love any feedback from you, internet. Thanks!