Automatically merge verified and tested GitHub Pull Requests

戏子无情 提交于 2019-12-21 04:37:11

问题


I'd like to automatically (i.e. from Jenkins) merge a GitHub pull request that has been approved by a person and has been tested successfully; in other words, when all THREE of these checkmarks are green:

Is this possible? I haven't found any documentation on an API for GitHub's new "changes approved" code review functionality.


回答1:


There is a new PullRequestReviewEvent webhook that is triggered when a review is submitted in a non-pending state. The body of the webhook contains the ["review"]["state"] field, which will be approved when all reviewers have approved the changes (i.e. when you get the green "changes approved" tick in the UI).

Combine this with the StatusEvent for the head SHA of your pull request to get the status checks from CI and so on, then finally check the "merge-ability" of the pull by requesting the pull request from the API:

GET /repos/:owner/:repo/pulls/:number

Once you have all three things, you can merge the pull request with:

PUT /repos/:owner/:repo/pulls/:number/merge

and appropriate payload parameters. Note you'll need the Accept: application/vnd.github.polaris-preview+json for some of the payload parameters as they are in a preview period.




回答2:


You can use Mergify to do exactly this, since this is what it has been created for. Just set up a minimal .mergify.yml file in your repository:

rules:
  default:
    protection:
      required_status_checks:
        context:
          - continuous-integration/travis/pr
      required_pull_request_reviews:
        required_approving_review_count: 1

And you'll be good to go.

(disclaimer: I'm one of the Mergify founders)




回答3:


https://github.com/bobvanderlinden/probot-auto-merge is a free GitHub app that does the job. It's configurable in .github/auto-merge.yml.



来源:https://stackoverflow.com/questions/40391344/automatically-merge-verified-and-tested-github-pull-requests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!