# #gitlab-api
Вопрос:
Я хотел бы настроить свой проект gitlab таким образом, чтобы каждый сопровождающий мог объединиться (после проверки), но никто не мог продвигаться дальше master
; только бот (для выпуска).
Я использую terraform для настройки своей gitlab с помощью чего-то вроде этого:
resource "gitlab_branch_protection" "BranchProtect" {
project = local.project_id
branch = "master"
push_access_level = "no one"
merge_access_level = "maintainer"
}
Но у нас есть версия «премиум», и поставщик терраформ не позволяет добавлять пользователя (goto: https://github.com/gitlabhq/terraform-provider-gitlab/issues/165 ).
Итак, что мне нравится делать, так это выполнять некоторый http-запрос в API для добавления конкретного пользователя. Поэтому я делаю это вот так:
- получите реальную защиту
- удалите фактическую конфигурацию
- обновите полученную конфигурацию тем, что я хочу
- нажмите на новую конфигурацию
Кстати: Я не нашел, как просто обновить конфигурацию… https://docs.gitlab.com/ee/api/protected_branches.html
TMP_FILE=$(mktemp)
http GET
$GITLAB_URL/api/v4/projects/$pid/protected_branches
PRIVATE-TOKEN:$GITLAB_TOKEN
name=$BRANCH_NAME
|
jq
--arg uid $USER_ID
'.[0] | .push_access_levels |= . [{user_id: ($uid | tonumber)}]'
> $TMP_FILE
http DELETE
"$GITLAB_URL/api/v4/projects/$pid/protected_branches/$BRANCH_NAME"
PRIVATE-TOKEN:$GITLAB_TOKEN
http --verbose POST
"$GITLAB_URL/api/v4/projects/$pid/protected_branches"
PRIVATE-TOKEN:$GITLAB_TOKEN
< $TMP_FILE
Но моя проблема в том, что полученная конфигурация не соответствует моим ожиданиям, у меня есть что-то вроде этого:
"push_access_levels": [
{
"access_level": 40,
"access_level_description": "Maintainers",
"group_id": null,
"user_id": null
}
],
Как я могу просто обновить защиту филиала, чтобы добавить простого пользователя ?
Ответ №1:
Хорошо, как они говорят: RTFM !
Но вам нужно удалить правило перед добавлением новой конфигурации.
http
DELETE
"$GITLAB_URL/api/v4/projects/$pid/protected_branches/$BRANCH_NAME"
PRIVATE-TOKEN:$GITLAB_TOKEN
http
POST
$GITLAB_URL/api/v4/projects/$pid/protected_branches
PRIVATE-TOKEN:$GITLAB_TOKEN
name==${BRANCH_NAME}
push_access_level==0
merge_access_level==40
unprotect_access_level==40
allowed_to_push[][user_id]==$USER_ID