Rust compiler merge process

by Guillaume Gomez

Who am I?

Rust language reviewer and contributor. Member of:
  • rustdoc team (team leader)
  • docs.rs team
  • dev-tools team


I am a Huawei engineer.

A pull-request is opened

A reviewer is assigned by the rustbot bot...

A pull-request is opened

... And tags are added as well
### Teams repository [github.com/rust-lang/teams](https://github.com/rust-lang/teams)

Governance website

rust-lang.org/governance

Approval

  • If the pull request:
  • Has no performance impact
  • Makes no breaking change
  • Doesn't add new feature
  • CI passes

### Continuous integration There are two "levels" of CI: * Small subset run on pull request directly (most tests but only for linux x64) * Full run of all tests for all platforms Nothing can be merged if the CI doesn't pass!
### Build queue [bors.rust-lang.org/queue/rust](https://bors.rust-lang.org/queue/rust) ![bors queue](./images/queue.png)
### What is tested? * Compiletest * Unit tests * Rustc and Rustdoc error output * Documentation examples * All tools tests (cargo, rustdoc, clippy, rustfmt, etc) * Documentation dead links * And quite a lot more!
### On which OS/architecture? * Tier 1 platforms: Must build and pass test * Tier 2 platforms: Must build * Tier 3 plaftorms: Exists Target tier policy: [doc.rust-lang.org/nightly/rustc/target-tier-policy.html](https://doc.rust-lang.org/nightly/rustc/target-tier-policy.html) List of platforms for each tier: [doc.rust-lang.org/rustc/platform-support.html](https://doc.rust-lang.org/rustc/platform-support.html)
### What about releases? In (very) short: 1. bors build queue is frozen. 2. beta and stable branches are updated. 3. All relevant information is updated everywhere. 4. Binaries are generated for all plaftorms. 5. Blog post is released.

Performance

Pull request was merged, but now it's time to check for performance impact.

perf.rust-lang.org
### Other cases Adding a new feature or introducing a breaking changes. Three possibilities: * RFC (Request For Comments): for big changes * MCP (Major Compiler Changes): for "not too big" changes in the compiler * FCP (Final Comment Period): for "not too big" changes

Checking for potential regressions

In case a pull request changes things that could introduce a regression, we use crater.

Crater

crater.rust-lang.org

Tips for potential new contributors

  • Look at E-easy or E-mentor tagged issues.
  • Read the rustc dev guide: rustc-dev-guide.rust-lang.org
  • Try to write compiler plugins or contribute to clippy to see how the compiler internals work


To help you with compiler plugins, take a look at the rustc-tools crate.

Thank you for listening!

More Rust things on
< blog.guillaume-gomez.fr >

< guillaume1.gomez@gmail.com >

@GuillaumeGomez
@imperioworld_
@imperio@toot.cat