It’s another monthly burst of news about bors-ng, the old, deprecated, third-party merge queue implementation for GitHub.

In the last month, we landed 18 PRs in the bors-ng repository.

“This Month in Bors” is written in public on GitHub. If you find a mistake, pull requests or issue reports are appreciated!

Deprecation notice

As the primary maintainer, I officially declare Bors-NG to be feature frozen and deprecated. The public instance will remain running for awhile, but it will eventually start emitting warnings and be taken down. The source code will always be available if you want to run your own instance.

The main reason for this is that GitHub has a built-in merge queue now that is publicly available. It’s still marked “beta”, but you can use it without going on a wait list. More importantly, there’s a bunch of bugs in bors-ng that we can’t fix, but they can. For example (this is not an exhaustive list):

  • #1217: When bors-ng queues a squash merge and runs it, then pushes the squash merge into mainline, there’s no way to make mark the PR as “merged.”
  • #576: Bors-NG requires its own, separate, settings in bors.toml and can’t just use GitHub’s own because of the way status checks work when copying from the staging branch.
  • #1493: GitHub behaves inconsistently between octopus merges and simple merges, because a simple merge is considered equivalent to the PR for status checks, but an octopus merge is not.
  • #894: Repository admins wind up seeing a merge button that they shouldn’t click. GitHub can just replace the merge button with a queue button, which is what they do.
    • More generally, GitHub merge queues get a button in the interface, while Bors-NG relies on a command.

Bors-NG also has a lot of fixable, but difficult, bugs, like its CODEOWNERS parser not perfectly matching the real parser.

I pretty much expected this to happen after GitHub Actions and GitLab merge trains came out. It’s one reason why the public instance doesn’t allow private repositories; anyone who’s currently self-hosting Bors-NG knows how to self-host it, and some have helped me refine the documentation for setting up your own instance, so anyone who still wants to use it instead of migrating to GitHub’s built-in merge queue can run an instance themselves after the public instance eventually goes away and not have their workflow disrupted too much.

And Bors-NG has a been a wild success at what I actually hoped it would accomplish: it helped popularize the Not Rocket Science rule that the mainline branch should be tested before being pushed to mainline. There is now turnkey support for that built into the platform.

Notable Additions

  • wingyplus made the PR status link go to the batch page instead of the log

New Contributors

No new contributors this month.

Want to see your name in this newsletter? Contribute on our GitHub repository.

Who’s using bors?

This month’s featured user is eris, a Discord bot used for the Internet show LoadingReadyRun (specifically, it’s the Discord adapter for LRRbot).

Got any suggestions for next month? Post a comment on the May pull request.