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

  • 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НетТег в проекте-источнике, из которого будет сформирован Merge Request. Если не указан, используется ветка в проекте-источнике-
source_project_branchНетВетка в проекте-источнике, из которой будет сформирован Merge Requestmain
additionalIgnoreFilesНетСписок файлов, содержащих пути для исключения из MR. Заполняется по аналогии с .templateignore-
valuesНетПеременные, используемые при шаблонизации, в формате ключ: значение-

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

Платформа:

  1. Клонирует репозиторий-шаблон для генерации MR по его идентификатору (source_project_id). Подробнее — в «Деталях работы».
  2. Считывает файл values.yaml, хранящийся в корне репозитория, и определяет переменные по умолчанию для шаблонизации.
  3. Считывает переменные, передаваемые при запуске действия, и объединяет (merge) их с переменными из values.yaml. Приоритет отдаётся переменным, передаваемым при запуске действия.
  4. Считывает файл .templateignore и определяет директории и файлы, исключаемые из шаблонизации.
  5. Рендерит файлы из шаблонов, учитывая values.yaml и переданных в действие переменных.
  6. Изменяет удалённый (remote) репозиторий на целевой, согласно его ID (target_project_id), и выполняет git push в ветку в проекте-источнике (source_project_branch), либо в основную ветку main.
  7. Создаёт MR согласно заданным настройкам путём отправки POST-запроса в GitLab API.

Примечание

Действие осуществляет POST-запрос по URL: /api/v4/projects/:id/merge_requests.