Для выполнения действия необходимы учётные данные:

  • 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НетПеременные, используемые при шаблонизации, в формате ключ: значение-

Алгоритм работы

Портал:

  1. Клонирует проект-шаблон (source_project_id) с тегом source_project_tag или, если тег не указан, с веткой source_project_branch. Подробнее — в «Деталях работы».
  2. Считывает файл values.yaml, хранящийся в корне репозитория-шаблона, и определяет переменные по умолчанию для шаблонизации.
  3. Считывает переменные, передаваемые при запуске действия, и объединяет (merge) их с переменными из values.yaml. Приоритет отдаётся переменным, передаваемым при запуске действия.
  4. Считывает файл .templateignore и определяет директории и файлы, исключаемые из шаблонизации.
  5. Рендерит файлы из шаблонов с учётом values.yaml и переданных в действие переменных.
  6. Клонирует целевой проект (target_project_id) с веткой merge_request_spec.target_branch.
  7. Создаёт в клоне ветку merge_request_spec.source_branch из merge_request_spec.target_branch и переключается на неё.
  8. Копирует отрендеренные файлы в целевой проект, перезаписывая файлы с совпадающими путями.
  9. Создаёт коммит с изменениями и отправляет его (push) в ветку merge_request_spec.source_branch целевого проекта. Отправка выполняется без принудительной перезаписи: если эта ветка уже есть в целевом проекте и содержит коммиты, которых нет в merge_request_spec.target_branch, действие завершается с ошибкой.
  10. Создаёт 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.