[llvm-dev] Notes from GitHub Pull Requests round table

David Chisnall via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 20 08:55:09 PST 2020


Bors was the bot I've seen used for this the most, I've also seen a 
couple of other projects with hand-rolled things.

You can build staged-review into this with the workflow discussed 
previously where there's a full-feature PR and a number of PRs that are 
raised against that PR's branch.  You then merge from the edge inwards 
and only the final wrap-up PR goes through this process.

I've also seen in proprietary projects an approach that does a little 
bit of speculation and tries running CI on the result of applying all of 
the pending merges first and falls back to one-by-one or binary search 
to find the failing commit only if the combined patch doesn't pass.  I 
don't think bors has that option, but it might not be too hard to add.

David

On 20/11/2020 01:29, Thomas Lively wrote:
> The Rust project uses this head-always-green model very successfully. 
> They have a github bot called bors that manages testing and merging PRs 
> once they have been approved by code owners. The bot interface is very 
> flexible and the bot has been extracted into its own project: 
> https://bors.tech/ <https://bors.tech/>. You can see it turning through 
> all the approved Rust PRs here: https://bors.rust-lang.org/queue/rust 
> <https://bors.rust-lang.org/queue/rust>. The only downside of this 
> system is that it can take a long time for a PR to be automatically 
> merged since PRs generally need to be tested one at a time to prevent 
> semantic merge conflicts. The fix for that is to create "rollups" in 
> which multiple PRs are tested and landed as a single unit. I'm not sure 
> whether this system would scale to the commit frequency we have in LLVM, 
> though.
> 
> On Thu, Nov 19, 2020 at 2:39 PM Mehdi AMINI via llvm-dev 
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> 
> 
> 
>     On Thu, Nov 19, 2020 at 1:56 AM David Chisnall via llvm-dev
>     <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> 
>         On 18/11/2020 17:36, Mike Edwards via llvm-dev wrote:
>          > Hi Keith,
>          > You should be able to access the notes here:
>          >
>         https://docs.google.com/document/d/1flP8TqS71x4KF6h98vZV3ctXADBD39_vjrXn_BQn4hQ/edit?usp=sharing
>         <https://docs.google.com/document/d/1flP8TqS71x4KF6h98vZV3ctXADBD39_vjrXn_BQn4hQ/edit?usp=sharing>
> 
>          >
>         <https://docs.google.com/document/d/1flP8TqS71x4KF6h98vZV3ctXADBD39_vjrXn_BQn4hQ/edit?usp=sharing
>         <https://docs.google.com/document/d/1flP8TqS71x4KF6h98vZV3ctXADBD39_vjrXn_BQn4hQ/edit?usp=sharing>>
>          > Let me know if you run into any issues.
> 
>         Thanks.  There's one issue that isn't directly relevant to PRs,
>         but is
>         likely to become more visible if we go to a PR workflow:
> 
>         LLVM takes quite a long time to run the tests and there's
>         usually one
>         commit in between running the test suite on a patch and pushing
>         it to
>         master.  If the result then causes test failures, you won't find
>         out
>         until some time later.  This means I'm generally only willing to
>         hit the
>         merge button near to the start of the day, when I'm likely to be
>         around
>         and paying attention when the failure notices come in, which
>         increases
>         the likelihood that there will be an intermediate patch that causes
>         problems.
> 
>         With a PR-based workflow, it becomes fairly easy to set up a
>         system to
>         manage a queue of patches to be merged, triggered by either a
>         comment
>         from a member of the project or a label (e.g. ready-to-merge) being
>         added to the PR.  The CI infrastructure then rebases the PR on
>         the PR
>         that's ahead of it in the queue (master if it's the front of the
>         queue),
>         kicks off the build, and fast-forwards master when it succeeds. 
>         Head is
>         always in a state where the build bots are happy and if an
>         intermediate
>         change causes problems then that's reflected in the PR that
>         would see
>         the failure, nowhere else.  Subsequent PRs in the queue can
>         rebased on
>         the last passing version and the merge process can continue
>         without a
>         human needing to notice the buildbot failures and revert anything.
> 
> 
>     Such a system is definitely possible, but I wouldn't consider it
>     "fairly easy". Do you have examples of OSS infra to achieve this?
>     I also don't believe such a system is a guarantee of "always green
>     master branch":
>     1) you have flaky test
>     2) it is unlikely that your pre-merge testing can cover the entire
>     matrix of configurations supported by the project: all configs
>     (assert/no assert, build with shared libraries, etc.) time all
>     sanitizers times all subprojects times all host and target platforms?.
> 
>     (also implementing such a system from scratch does not really seem
>     harder conceptually with Phabricator patches vs GitHub PR:
>     fundamentally if a phabricator patch can't be applies on top of
>     current HEAD, then the PR couldn't be rebased without conflict
>     either for example, ultimately after `arc patch` you are
>     manipulating the same git branches locally in your CI).
> 
>     Thanks,
> 
>     -- 
>     Mehdi
>     _______________________________________________
>     LLVM Developers mailing list
>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>     https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>     <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
> 


More information about the llvm-dev mailing list