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 usersFromGroup = PageUtils.toStream({ pageRequest ->
userService.findUsersByGroup(GROUP_NAME, pageRequest)
}, PAGE_SIZE).collect { it as ApplicationUser }
def randomUsersFromGroup = getRandomUsersFromGroup(usersFromGroup, NUMBER_OF_USERS, pullRequest.author.user)
randomUsersFromGroup.each { user ->
pullRequestService.addReviewer(pullRequest.toRef.repository.id, pullRequest.id, user.name)
}
Set getRandomUsersFromGroup (List users, int numberOfUsers, ApplicationUser prUserAuthor) {
def randomUsers = [] as Set
while (randomUsers.size() < numberOfUsers) {
Collections.shuffle(users)
// The PR Author can't be reviewer and to avoid the user being duplicated
if (prUserAuthor != users.first() && !randomUsers.contains(users.first())) {
randomUsers << users.first()
}
}
randomUsers
}