[cfe-dev] [Openmp-dev] [GitHub] RFC: Enforcing no merge commit policy

Tom Stellard via cfe-dev cfe-dev at lists.llvm.org
Fri May 10 14:02:52 PDT 2019


On 04/13/2019 05:13 PM, Mehdi AMINI wrote:
> 
> 
> On Sat, Apr 13, 2019 at 4:47 PM Mehdi AMINI <joker.eph at gmail.com <mailto:joker.eph at gmail.com>> wrote:
> 
> 
> 
>     On Tue, Apr 9, 2019 at 12:39 AM David Chisnall via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
> 
>         On 09/04/2019 00:32, Tom Stellard via cfe-dev wrote:
>         > As a backup plan, I am going to look into implementing option #1, but instead
>         > of having git-llvm create a pull request, it would push first to a staging
>         > branch and then push to master if a 'no-merge commit' status checks pass.  This
>         > is essentially the same flow as using pull requests, but without all the
>         > pull request noise.
> 
>         I don't think that you can enforce this policy on the server side.  You
>         could; however, make git-llvm create a pull request and, if the relevant
>         checks pass, automatically use the GitHub APIs to do a rebase and merge.
> 
> 
>     I believe you can with: https://help.github.com/en/articles/enabling-required-status-checks
> 
>     I don't even think you need to push a branch for this*, the git-llvm script should be able to perform the required check locally, then issue a REST call and push to master.
> 

I've tested this some more and setting the check status does not work if
you have commits in your repo that you have never tried to push.  It
does work though if you have tried to push them and had the push rejected.

So it's still doable, but we would just have to push once and allow the
push to be rejected before we update the check status.

-Tom

> 
> I just double-checked (I created a fake "rebased" check on my repo) and it still works as expected:
> 
> $ git push
> Enumerating objects: 5, done.
> Counting objects: 100% (5/5), done.
> Writing objects: 100% (3/3), 270 bytes | 270.00 KiB/s, done.
> Total 3 (delta 0), reused 0 (delta 0)
> remote: error: GH006: Protected branch update failed for refs/heads/master.
> remote: error: Required status check "rebased" is expected.
> To github.com:joker-eph/test_required_check.git
>  ! [remote rejected] master -> master (protected branch hook declined)
> error: failed to push some refs to 'git at github.com:joker-eph/test_required_check.git'
> 
> The `git llvm push` script could very well rebase, check the absence of merge commit, and issue this REST call:
> 
> $ curl   --user "{GitHub_username}"   -H "Authorization: token {GitHub token}"  https://api.github.com/repos/joker-eph/test_required_check/statuses/$(git <https://api.github.com/repos/joker-eph/test_required_check/statuses/$%28git> rev-list HEAD -n 1)  -X POST --data '{"state": "success", "context": "rebased" }'
> 
> After which the push is passing:
> 
> $ git push
> Enumerating objects: 5, done.
> Counting objects: 100% (5/5), done.
> Writing objects: 100% (3/3), 270 bytes | 270.00 KiB/s, done.
> Total 3 (delta 0), reused 0 (delta 0)
> To github.com:joker-eph/test_required_check.git
>    a07ce8f..2dd24ba  master -> master
> 
> -- 
> Mehdi




More information about the cfe-dev mailing list