Bors is a robot that integrates with GitHub pull requests. Basically, instead of clicking the merge button, privileged users leave a comment (bors r+
). It queues up the pull requests and tests them in a staging branch. If the staging branch passes, it gets pushed over the top of master.
This way, master branch always passes CI. If a pull request (or combination of mutually incompatible pull requests) breaks the build, it never gets to master. If it gets to master, it already passed the test suite.
This isnāt a replacement for CI runners like Travis CI; itās basically a wrapper on top of it. It actually just pushes to the staging branch and waits for GitHub Status Notifications (GH status is the closest thing I know of to a universal CI protocol).
Iām already using it to develop itself. Iām in the process of moving stuff off of an older Rust-based version of the same concept (contrary to what /r/rust might want you to think, Rust is really not a good choice for non-CPU-bound web apps, and this is about as non-CPU-bound as you can get; it spends most of its time waiting for your test suite to run).
p.s. I would very much appreciate some amount of code review, since this is my first Elixir project. You might also be interested in using itā¦