Кастомизация reviewers в Pull-Request`ах на Bitbucket
13 Apr 2017Нам понадобилась возможность делать merge пулл-реквеста для определенной группы пользователей без необходимости одобрения со стороны approvers. Т.е. главные разработчики могут позволить себе делать merge без code-review. Как оказалось, таких возможностей в Bitbucket нет. В случае задания в настройках репозитория опции “Requires N approvers” невозможно выполнить merge, какими бы полномочиями пользователь не обладал, Bitbucket требует одобрения! Конфигурация Branch Permissions также не может данную проблему. Выручить может ScriptRunner.
Поэтому был добавлен небольшой ScriptRunner-скрипт “Require a number of approvers” в секцию “Script Merge Checks” (в глобальных настройках ScriptRunner). Перед этим была создана группа для главных разработчиков bitbucket-sw-managers, пользователи которой могут свободно делать merge без review/approve. Также необходимо выключить опцию Pull requests → Requires N approvers в настройках репозиториев, если она включена (мы будем управлять этой опцией динамически).
Сам скрипт выглядит следующим образом:
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.bitbucket.user.UserService
import com.atlassian.bitbucket.auth.AuthenticationContext
def userService = ComponentLocator.getComponent(UserService)
def authContext = ComponentLocator.getComponent(AuthenticationContext)
def permitted_groups = ["bitbucket-sw-managers"]
def need_approve = true
for (group in permitted_groups) {
if (userService.isUserInGroup(authContext.getCurrentUser(), group)) {
need_approve = false
}
}
return need_approve
permitted_groups
является списком, потому что вполне вероятно, что одной группой не обойтись в ближайшем будущем.
Не забыть выставить требуемое число ревьюеров в поле Minimum number of approvers, например 1.