Homu is a bot that integrates with GitHub and your favorite continuous integration service, such as Buildbot or Travis CI.
Let's take Travis CI as an example. If you send a pull request to a repository,
Travis CI instantly shows you the test result, which is great. However, after
several other pull requests are merged into the master
branch, your pull
request can still break things after being merged into master
. The
traditional continuous integration solutions don't protect you from this.
In fact, that's why they provide the build status badges. If anything pushed to
master
is completely free from any breakage, those badges will not be
necessary, as they will always be green. The badges themselves prove that there
can still be some breakages, even when continuous integration services are used.
To solve this problem, the test procedure should be executed just before the
merge, not just after the pull request is received. You can manually click the
"restart build" button each time before you merge a pull request, but Homu can
automate this process. It listens to the pull request comments, waiting for an
approval comment from one of the configured reviewers. When the pull request is
approved, Homu tests it using your favorite continuous integration service, and
only when it passes all the tests, it is merged into master
.
Note that Homu is not a replacement of Travis CI or Buildbot. It works on top of them. Homu itself doesn't have the ability to test pull requests.
Homu is largely inspired by bors. The concept of "tests should be done just before the merge" came from bors. However, there are also some differences:
And also, Homu has more features, such as rollup
, try
, and the Travis CI
support.
sudo apt-get install python3-venv
pyvenv .venv
. .venv/bin/activate
# Stable version
pip install homu
# Development version
git clone https://github.com/barosl/homu.git
pip install -e homu
Copy cfg.sample.toml
to cfg.toml
, and edit it accordingly.
Create a GitHub account that will be used by Homu. You can also use an
existing account. In the account settings, register a new
application and generate a new access token (with the repo
permission).
The OAuth Callback URL should be http://HOST:PORT/callback
, the homepage URL
isn't needed and can be anything, for example http://HOST:PORT/
.
Add a Webhook to your repository:
http://HOST:PORT/github
application/json
repo.NAME.github.secret
in cfg.tomlAdd a Webhook to your continuous integration service:
Insert the following code to the master.cfg
file:
from buildbot.status.status_push import HttpStatusPush
c['status'].append(HttpStatusPush(
serverUrl='http://HOST:PORT/buildbot',
extra_post_params={'secret': 'repo.NAME.buildbot.secret in cfg.toml'},
))
Add your Travis token as repo.NAME.travis.token
in cfg.toml.
Insert the following code to the .travis.yml
file:
notifications:
webhooks: http://HOST:PORT/travis
branches:
only:
- auto
. .venv/bin/activate
homu