You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -63,25 +80,47 @@ Since the merge commit is based on the latest master and only one can be tested
63
80
at the same time, when the results are green master is fast-forwarded to that
64
81
merge commit.
65
82
83
+
The `auto` branch and other branches used by bors live on a fork of rust-lang/rust:
84
+
[rust-lang-ci/rust]. This was originally done due to some security limitations in GitHub
85
+
Actions. These limitations have been addressed, but we've not yet done the work of removing
86
+
the use of the fork.
87
+
66
88
Unfortunately testing a single PR at the time, combined with our long CI (~3
67
-
hours for a full run), means we can’t merge too many PRs in a single day, and a
89
+
hours for a full run)[^1], means we can’t merge too many PRs in a single day, and a
68
90
single failure greatly impacts our throughput for the day. The maximum number
69
91
of PRs we can merge in a day is around 8.
70
92
93
+
The large CI run times and requirement for a large builder pool is largely due to the
94
+
fact that full release artifacts are built in the `dist-` builders. This is worth it
95
+
because these release artifacts:
96
+
97
+
- allow perf testing even at a later date
98
+
- allow bisection when bugs are discovered later
99
+
- ensure release quality since if we're always releasing, we can catch problems early
100
+
101
+
Bors [runs on ecs](https://github.com/rust-lang/simpleinfra/blob/master/terraform/bors/app.tf) and uses a sqlite database running in a volume as storage.
102
+
103
+
[^1]: As of January 2023, the bottleneck are the `dist-x86_64-linux` and `dist-x86_64-linux-alt` runners because of their usage of [BOLT] and [PGO] optimization tooling.
Sometimes we need a working compiler build before approving a PR, usually for
@@ -91,6 +130,8 @@ a separate branch (`try`), and they basically work the same as normal builds,
91
130
without the actual merge at the end. Any number of try builds can happen at the
92
131
same time, even if there is a normal PR in progress.
93
132
133
+
You can see the CI configuration for try builds [here](https://github.com/rust-lang/rust/blob/9d46c7a3e69966782e163877151c1f0cea8b630a/src/ci/github-actions/ci.yml#L728-L741).
134
+
94
135
[perf]: https://perf.rust-lang.org
95
136
[crater]: https://github.com/rust-lang/crater
96
137
@@ -179,8 +220,8 @@ automatically, posting it on the PR.
179
220
The bot is not hardcoded to look for error strings, but was trained with a
180
221
bunch of build failures to recognize which lines are common between builds and
181
222
which are not. While the generated snippets can be weird sometimes, the bot is
182
-
pretty good at identifying the relevant lines even if it’s an error we never
183
-
saw before.
223
+
pretty good at identifying the relevant lines even if it’s an error we've never
@@ -206,5 +247,18 @@ few days before we promote nightly to beta.
206
247
207
248
More information is available in the [toolstate documentation].
208
249
250
+
### GitHub Actions Templating
251
+
252
+
GitHub Actions does not natively support templating which can cause configurations to be large and difficult to change. We use YAML anchors for templating and a custom tool, [`expand-yaml-anchors`], to expand [the template] into the CI configuration that [GitHub uses][ci config].
253
+
254
+
This templating language is fairly straightforward:
0 commit comments