Dynamically Add Reviewers to a Pull Request
Using this script, you can dynamically add default and mandatory reviewers based on a script when a pull request (PR) is created or updated.
You can combine a script that sets reviewers with a condition so that you can automate some PR functions, like:
- Include a senior reviewer from the onsite team when a pull request from an outsourced team is created
- Include the mentor of a new team member when a PR is created by the new team member
- Include mandatory reviewers on the pull request, which are determined dynamically based on naming standards and AD groups
These features can work alongside each other without any interference, with one notable caveat. That is, if you add default reviewers using the Bitbucket feature and set a certain number of them to be required, then reviewers added using the ScriptRunner listener are not counted toward the approval requirement. This is consistent with how the Bitbucket server's default reviewers feature normally behaves. In short, the reviewers that are required to weigh in by Bitbucket server settings always have a say on a pull request.
Dynamically Mandate a Senior Developer to Review a Junior Developer's PRs to the default branch
In the example shown below, when pull requests are made to the default branch, a senior developer is added as a mandatory reviewer if the pull requests are created by junior developers. Otherwise, the senior developer is added by default but can be removed.
Retrieving reviewers in a merge check
You can retrieve the list of reviewers added by this built-in script in a merge check. Merge checks help you write your own rules around which reviewers should approve a PR and when. Use the following code to retrieve a list of reviewers:
import com.atlassian.bitbucket.pull.PullRequestParticipant
import com.atlassian.bitbucket.user.ApplicationUser
// Reviewers set by ScriptRunner listeners.
Set<ApplicationUser> mandatoryUsers = mergeRequest.pullRequest.autoAddedReviewers.mandatoryUsers
Set<ApplicationUser> defaultUsers = mergeRequest.pullRequest.autoAddedReviewers.defaultUsers
Set<String> mandatoryGroupNames = mergeRequest.pullRequest.autoAddedReviewers.mandatoryGroups
Set<String> defaultGroupNames = mergeRequest.pullRequest.autoAddedReviewers.defaultGroups
// All pull request reviewers
Set<ApplicationUser> allReviewers = mergeRequest.pullRequest.autoAddedReviewers.allUsers
// Or
Set<PullRequestParticipant> allReviewersFromPR = mergeRequest.pullRequest.reviewers