GitHub Pull Requests plugin for TeamCity
The hassle with Pull Requests
These days pull requests is a common technique of accepting changes from third-party contributors. In fact, it proved to be so convenient that some companies started to use it even for their regular development workflows.
It is possible to configure TeamCity to run builds on GitHub pull request branches. One had to provide a VCS root branch specification like
refs/pull/*/head for that. However, this configuration is not without its downsides.
For instance, with this configuration, the pull request for TeamCity is just a branch in a Git repository. It means that it is impossible to distinguish pull requests by their target branches. Moreover, it is a known fact that even if a pull request is closed in GitHub, the corresponding branch remains in a Git repository. It is not so uncommon to see repositories with several thousands of pull request-related branches. In TeamCity they clutter the user interface and make the performance worse.
TeamCity does not know who opened the pull request either, so it is not possible to limit the builds of pull requests opened by the organization members only. As a result, if third parties can open pull requests for your repositories, configuring TeamCity to build pull requests imposes a big security risk.
GitHub Pull Requests plugin
The new GitHub Pull Requests plugin is intended to address all the issues described above. As stated in the plugin name, it supports GitHub and GitHub Enterprise only.
The plugin provides a build feature which allows filtering pull requests that you want to build:
The author filter in the build feature configuration settings provides the following options:
- PRs coming from the members of the same organization only
- PRs from the members and all external collaborators
- PRs from everybody.
Once the new build feature is added to a build configuration, TeamCity will provide additional details for the pull request branch on the build overview page:
The plugin is compatible with TeamCity 2018.1.x. You can download it from the plugin repository.