Skip to main content
Example scripts
arrow icon
To homepage
Bitbucket
Data centre icon
Data Center

Add Random Reviewers to Pull Request From Group

Features
Listeners
Tags
Created 1 year ago, Updated 5 month(s) ago
App in script
ScriptRunner For Bitbucket
ScriptRunner For Bitbucket
by Adaptavist
Compatibility
compatibility bullet
Bitbucket (6.0 - 7.17)
compatibility bullet
ScriptRunner For Bitbucket (7.10.0)
Language |
groovy
import com.atlassian.bitbucket.pull.PullRequestService
import com.atlassian.bitbucket.user.UserService
import com.atlassian.bitbucket.user.ApplicationUser
import com.atlassian.bitbucket.util.PageUtils
import com.atlassian.sal.api.component.ComponentLocator

def final GROUP_NAME = 'dev-reviewer-group'
def final PROJECT_KEY = 'LIBRARY'
def final REPOSITORY_NAME = 'scripts-repository'
def final NUMBER_OF_USERS = 2
def final PAGE_SIZE = 1000

def pullRequestService = ComponentLocator.getComponent(PullRequestService)
def userService = ComponentLocator.getComponent(UserService)
def pullRequest = event.pullRequest

if (pullRequest.toRef.repository.project.key != PROJECT_KEY || pullRequest.toRef.repository.name != REPOSITORY_NAME) {
    return
}

def usersFromGroupWithoutPrAuthor = PageUtils.toStream({ pageRequest ->
    userService.findUsersByGroup(GROUP_NAME, pageRequest)
}, PAGE_SIZE).findAll {
    it != pullRequest.author.user
}

Collections.shuffle(usersFromGroupWithoutPrAuthor)

def assignedReviewers = [] as Set<ApplicationUser>

while (!usersFromGroupWithoutPrAuthor.isEmpty() && assignedReviewers.size() < NUMBER_OF_USERS) {
    def reviewer = usersFromGroupWithoutPrAuthor.pop() as ApplicationUser

    try {
        pullRequestService.addReviewer(pullRequest.toRef.repository.id as int, pullRequest.id as long, reviewer.name)
        assignedReviewers << reviewer
    } catch (Exception e) {
        log.warn("Could not add user ${reviewer.name} as a reviewer for this pull request: ${e.message}")
    }
}

if (assignedReviewers.size() < NUMBER_OF_USERS) {
    log.warn('Not enough users in the group available to add as reviewers')
    return
}
Having an issue with this script?
Report it here