Learn how to speed up your Graphite merge queue
A
, B
, C
, D
, and E
.
1. CI starts for A
. In parallel, Graphite creates these temporary groupings and starts CI at the same time:
A
← B
(i.e. B
rebased on A
), thereby testing this group of 2 PR’s at once
A
← B
← C
, thereby testing this group of 3 PR’s at once
A
succeeds, it’s merged.
B
← C
← D
, thereby testing this group of 3 PR’s at once.B
succeeds, the same process repeats: a group for C
← D
← E
is created and CI runs.
4. If at this point C
fails, then:
C
is evicted from the queue.
C
← D
and C
← D
← E
are both canceled.
D
then becomes the first PR in the queue:
D
.
D
← E
.
graphite-app
bot in GitHub to bypass merge restrictions, via your existing branch protection rules or rulesets. See how to set up this up here
[Graphite MQ] Draft PR
to make them easy to identify.
When Graphite groups stacks in the merge queue for running CI, it creates a branch with a predictable prefix: gtmq_
. You can use this for customizing CI runs or other behavior for enqueued PR’s.
When an enqueued PR merges, it’ll be marked as closed in GitHub instead of merged. Graphite will render and treat it as merged across the product, including the PR inbox, PR page, and statistics shared by Insights. This allows you to keep the GitHub branch protection rule on to require a linear history.
The system identifies which stacks in the batch caused the failure by running CI on smaller subsets of the batch
Stacks that pass CI are automatically added back to the merge queue to continue processing
Stacks that fail CI are identified and removed from the queue