Rust implementation of bors used for various Rust components (e.g. the compiler).
176
stars
1,918
commits
Rust
primary language
Sep 9, 2026
updated
Home of a rewrite of the homu bors implementation in Rust.
There are a few documents that should help with understanding the bot:
If you want to help testing the bot, please ask around on the #t-infra
stream on Rust Zulip.
The production instance of the bot is deployed at https://bors-prod.rust-lang.net. You can find its help page with the list of supported commands here.
There are several parameters that can be configured when launching the bot. Parameters without a default value are
required. Flags marked with * are required.
| CLI flag | Environment var. | Default | Description |
|---|---|---|---|
--app-id (*) | APP_ID | GitHub app ID of the bors bot. | |
--private-key (*) | PRIVATE_KEY | Private key of the GitHub app. | |
--webhook-secret (*) | WEBHOOK_SECRET | Key used to authenticate GitHub webhooks. | |
--client-id | OAUTH_CLIENT_ID | GitHub OAuth client ID for rollup UI. | |
--client-secret | OAUTH_CLIENT_SECRET | GitHub OAuth client secret for rollup UI. | |
--db | DATABASE_URL | Database connection string. Only PostgreSQL is supported. | |
--cmd-prefix | CMD_PREFIX | @bors | Prefix used to invoke bors commands in PR comments. |
--web_url | WEB_URL | http://localhost:8080 | Web URL where the bot's website is deployed. |
--permissions | PERMISSIONS | Rust Team API URL | Either a URL to the team v1 API or a path to a directory containing JSON files with try/review permissions. |
--zulip-username | ZULIP_USERNAME | Zulip account username for posting Zulip messages. | |
--zulip-token | ZULIP_TOKEN | Zulip account token for posting Zulip messages. | |
--zulip-server | ZULIP_SERVER | Zulip server URL for posting Zulip messages. | |
--ec2-role | CI_EC2_RUNNER_ROLE | AWS ARN role used to authenticate aws commands. |
The bot uses the following branch names for its operations.
automation/bors/try-merge
automation/bors/try
automation/bors/auto-merge
automation/bors/auto
automation/bors/try-perf-merge
automation/bors/try-perf
The merge and non-merge branches are needed because we cannot set branches to parent and merge them with a PR commit atomically using the GitHub API.
If you want to attach bors to a GitHub app, you should point its webhooks at <http address of bors>/github.
If you want to create rollups, you will need to create a GitHub OAuth app configured like so:
<http address of bors>/oauth/callback.Here is a guide on how to add a repository so that this bot can be used on it:
rust-bors.toml to the root of the main branch of the repository. The configuration struct that
describes the file can be found in src/config.rs. Here is an example configuration file.https://github.com/settings/apps/<app-name>/installations link.automation/bors/try branch (for try builds)automation/bors/auto branch (for auto builds)automation/bors/try-perf branch (for unrolled rollup perf builds)
[unroll] section is configured in the config file.automation/bors/try, automation/bors/try-merge, automation/bors/auto, automation/bors/auto-merge, automation/bors/try-perf, and automation/bors/try-perf-merge.We are happy to receive contributions to bors! You can check out our list of good first issues.
Note that sometimes the issues can get stale or they might not contain enough information that you would need to implement a feature or fix a bug. If you would like to work on something non-trivial, it would be great to open a topic on our Zulip channel so that we can discuss it.
We would like to thank all contributors who contributed to the creation of bors. Notably, we are very grateful to Võ Hoàng Long, who implemented a lot of the base functionality of the bot, and Sakibul Islam, who implemented the merge queue and rollups as part of his GSoC 2025 project.
Bors is dual-licensed under MIT and Apache 2.0.
(top 30 of 36)
Rust
96.1%
HTML
3.4%
Rust implementation of bors used for various Rust components (e.g. the compiler).
176
stars
1,918
commits
Rust
primary language
Sep 9, 2026
updated
Home of a rewrite of the homu bors implementation in Rust.
There are a few documents that should help with understanding the bot:
If you want to help testing the bot, please ask around on the #t-infra
stream on Rust Zulip.
The production instance of the bot is deployed at https://bors-prod.rust-lang.net. You can find its help page with the list of supported commands here.
There are several parameters that can be configured when launching the bot. Parameters without a default value are
required. Flags marked with * are required.
| CLI flag | Environment var. | Default | Description |
|---|---|---|---|
--app-id (*) | APP_ID | GitHub app ID of the bors bot. | |
--private-key (*) | PRIVATE_KEY | Private key of the GitHub app. | |
--webhook-secret (*) | WEBHOOK_SECRET | Key used to authenticate GitHub webhooks. | |
--client-id | OAUTH_CLIENT_ID | GitHub OAuth client ID for rollup UI. | |
--client-secret | OAUTH_CLIENT_SECRET | GitHub OAuth client secret for rollup UI. | |
--db | DATABASE_URL | Database connection string. Only PostgreSQL is supported. | |
--cmd-prefix | CMD_PREFIX | @bors | Prefix used to invoke bors commands in PR comments. |
--web_url | WEB_URL | http://localhost:8080 | Web URL where the bot's website is deployed. |
--permissions | PERMISSIONS | Rust Team API URL | Either a URL to the team v1 API or a path to a directory containing JSON files with try/review permissions. |
--zulip-username | ZULIP_USERNAME | Zulip account username for posting Zulip messages. | |
--zulip-token | ZULIP_TOKEN | Zulip account token for posting Zulip messages. | |
--zulip-server | ZULIP_SERVER | Zulip server URL for posting Zulip messages. | |
--ec2-role | CI_EC2_RUNNER_ROLE | AWS ARN role used to authenticate aws commands. |
The bot uses the following branch names for its operations.
automation/bors/try-merge
automation/bors/try
automation/bors/auto-merge
automation/bors/auto
automation/bors/try-perf-merge
automation/bors/try-perf
The merge and non-merge branches are needed because we cannot set branches to parent and merge them with a PR commit atomically using the GitHub API.
If you want to attach bors to a GitHub app, you should point its webhooks at <http address of bors>/github.
If you want to create rollups, you will need to create a GitHub OAuth app configured like so:
<http address of bors>/oauth/callback.Here is a guide on how to add a repository so that this bot can be used on it:
rust-bors.toml to the root of the main branch of the repository. The configuration struct that
describes the file can be found in src/config.rs. Here is an example configuration file.https://github.com/settings/apps/<app-name>/installations link.automation/bors/try branch (for try builds)automation/bors/auto branch (for auto builds)automation/bors/try-perf branch (for unrolled rollup perf builds)
[unroll] section is configured in the config file.automation/bors/try, automation/bors/try-merge, automation/bors/auto, automation/bors/auto-merge, automation/bors/try-perf, and automation/bors/try-perf-merge.We are happy to receive contributions to bors! You can check out our list of good first issues.
Note that sometimes the issues can get stale or they might not contain enough information that you would need to implement a feature or fix a bug. If you would like to work on something non-trivial, it would be great to open a topic on our Zulip channel so that we can discuss it.
We would like to thank all contributors who contributed to the creation of bors. Notably, we are very grateful to Võ Hoàng Long, who implemented a lot of the base functionality of the bot, and Sakibul Islam, who implemented the merge queue and rollups as part of his GSoC 2025 project.
Bors is dual-licensed under MIT and Apache 2.0.
(top 30 of 36)
Rust
96.1%
HTML
3.4%