Для выполнения действия необходимы учётные данные:
password— пароль (токен) пользователя, от имени которого будет запускаться выполнение действия.username— имя пользователя, от которого будет запускаться выполнение действия.
CreateGitlabMergeRequest — создаёт новый Merge Request (MR) в целевом репозитории. В Merge Request добавляются файлы, хранящиеся в репозитории-источнике. Файлы могут содержать переменные, значение которых будет подставлено в момент создания MR.
Пример запроса
source_project_id: '0'
source_project_branch: example
source_project_tag: v1.0.0
target_project_id: '0'
merge_request_spec:
source_branch: example
target_branch: '1'
title: example
additionalIgnoreFiles:
- .ignore
- .example
values:
key1: value1
nested:
enabled: true
subkey: 123Спецификация запроса
| Название | Обязательность | Описание | Значение по умолчанию |
|---|---|---|---|
| source_project_id | Да | Идентификатор проекта-шаблона, файлы которого добавляются в Merge Request | - |
| target_project_id | Да | Идентификатор целевого проекта, в котором будет сформирован Merge Request | - |
| merge_request_spec | Да | Спецификация, соответствующая GitLab Merge Requests API | - |
| source_project_tag | Нет | Тег проекта-шаблона для клонирования. Если не указан, используется ветка source_project_branch | - |
| source_project_branch | Нет | Ветка проекта-шаблона для клонирования. Используется только для клонирования шаблона | main |
| additionalIgnoreFiles | Нет | Список файлов, содержащих пути для исключения из MR. Заполняется по аналогии с .templateignore | - |
| values | Нет | Переменные, используемые при шаблонизации, в формате ключ: значение | - |
Алгоритм работы
Портал:
- Клонирует проект-шаблон (
source_project_id) с тегомsource_project_tagили, если тег не указан, с веткойsource_project_branch. Подробнее — в «Деталях работы». - Считывает файл
values.yaml, хранящийся в корне репозитория-шаблона, и определяет переменные по умолчанию для шаблонизации. - Считывает переменные, передаваемые при запуске действия, и объединяет (merge) их с переменными из
values.yaml. Приоритет отдаётся переменным, передаваемым при запуске действия. - Считывает файл
.templateignoreи определяет директории и файлы, исключаемые из шаблонизации. - Рендерит файлы из шаблонов с учётом
values.yamlи переданных в действие переменных. - Клонирует целевой проект (
target_project_id) с веткойmerge_request_spec.target_branch. - Создаёт в клоне ветку
merge_request_spec.source_branchизmerge_request_spec.target_branchи переключается на неё. - Копирует отрендеренные файлы в целевой проект, перезаписывая файлы с совпадающими путями.
- Создаёт коммит с изменениями и отправляет его (push) в ветку
merge_request_spec.source_branchцелевого проекта. Отправка выполняется без принудительной перезаписи: если эта ветка уже есть в целевом проекте и содержит коммиты, которых нет вmerge_request_spec.target_branch, действие завершается с ошибкой. - Создаёт MR в целевом проекте согласно
merge_request_spec, отправляя POST-запрос в GitLab API.
Ответ
Ответ действия — объект созданного merge request GitLab с полями iid, web_url, state и другими. Поля доступны в последующих элементах процесса, например {{ .response.web_url }}.
Примечание
Действие осуществляет POST-запрос по URL: /api/v4/projects/:id/merge_requests.