Пользовательские скрипты
Введение
Пользовательские скрипты - инструмент для создания самописных скриптов, выполняемых в GitFlic и взаимодействующий с его сущностями. Скрипты выполняются на JavaScript стандарта ECMAScript версии 2022-го года. Благодаря данной функции, команды разработки самостоятельно могут создавать интеграции со сторонними инструментами и сервисами, настраивать автоматизацию внутри GitFlic по своим сценариям.
Ещё одна ценность инструмента - открытый исходный код интеграций. Чтобы интегрировать свой развёрнутый GitFlic, достаточно скопировать из репозитория с интеграциями нужные файлы и добавить их через интерфейс. Это не требует сложных конфигураций, развёртывания или взаимодействия с REST-API GitFlic.
Использование
Взаимодействие с сущностями происходит через сервисы - объекты с набором методов, позволяющих создавать новые, изменять или получать уже имеющиеся сущности в GitFlic. Для того, чтобы лучше понимать, что принимают и возвращают сервисы, даётся определение нескольких классов:
Объект страницы содержит в себе следующие данные:
class Page<T> {...}
Название | Тип данных | Описание |
---|---|---|
page |
number | Номер текущей страницы |
size |
number | Число элементов на текущей страницы |
pageSize |
number | Максимальный число элементов на страницы |
totalPages |
number | Всего страниц |
totalElements |
number | Всего элементов |
elements |
T[] - массив сущностей | Список элементов |
Сущности, с которыми возможно взаимодействие:
Лейбл
Для взаимодействия с лейблами определен объект labelService
Сущность лейбл содержит в себе следующие данные:
class Label {...}
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID лейбла |
projectId |
string | UUID проекта, в котором находится лейбл |
value |
string | Название лейбла |
description |
string | Описание лейбла |
hexColor |
string | Код цвета лейбла в формате HEX |
Методы для работы с лейблами
Для работы с сущностью лейбл существуют следующие методы:
Создание лейбла
labelService.create(toCreate: Label) => Label
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет создан лейбл |
value |
string | Название лейбла |
description |
string | Описание лейбла |
hexColor |
string | Код цвета лейбла в формате HEX |
Изменение лейбла
labelService.edit(toEdit Label) => Label
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID лейбла |
projectId |
string | UUID проекта, в котором будет изменен лейбл |
value |
string | Необязательный параметр. Название лейбла |
description |
string | Необязательный параметр. Описание лейбла |
hexColor |
string | Необязательный параметр. Код цвета лейбла в формате HEX |
Получение списка всех лейблов
labelService.getAll(...) => Page<Label>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет осуществлен поиск |
startPage |
number | Номер запрашиваемой страницы |
pageSize |
number | Размер страницы |
Получение списка лейблов по UUID
labelService.findAllByIds(projectId: string, ids: string[]) => Label[]
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет осуществлен поиск |
ids |
[]string | Список UUID лейблов, которые нужно получить |
Проблема
Для взаимодействия с проблемами определен объект issueService
Сущность проблема содержит в себе следующие данные:
class Issue {...}
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID проблемы |
localId |
number | Номер проблемы в проекте |
projectId |
string | UUID проекта |
title |
string | Заголовок проблемы |
description |
string | Описание проблемы |
status |
string | Статус проблемы. Возможные значения: OPEN , IN_PROGRESS , CLOSED , COMPLETED |
priority |
string | Приоритет проблемы. Возможные значение: LOW , MIDDLE , HIGH , EXTREME |
authorId |
string | UUID автора проблемы |
assignedUserIds |
string[] | Список UUID ответственных за проблему |
labelIds |
string[] | Список UUID лейблов |
Методы для работы с проблемами
Для работы с сущностью проблема существуют следующие методы:
Создание проблемы
issueService.create(toCreate: Issue) => Issue
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет создана проблема |
title |
string | Заголовок проблемы |
description |
string | Описание проблемы |
status |
string | Статус проблемы. Возможные значения: OPEN , IN_PROGRESS , CLOSED , COMPLETED |
priority |
string | Приоритет проблемы. Возможные значение: LOW , MIDDLE , HIGH , EXTREME |
assignedUserIds |
string[] | Список UUID ответственных за проблему |
labelIds |
string[] | Список UUID лейблов |
Изменение проблемы
issueService.edit(toEdit: Issue) => Issue
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет обновлена проблема |
id |
string | UUID проблемы |
title |
string | Заголовок проблемы |
description |
string | Описание проблемы |
status |
string | Статус проблемы. Возможные значения: OPEN , IN_PROGRESS , CLOSED , COMPLETED |
priority |
string | Приоритет проблемы. Возможные значение: LOW , MIDDLE , HIGH , EXTREME |
assignedUserIds |
string[] | Список UUID ответственных за проблему |
labelIds |
string[] | Список UUID лейблов |
Получение списка всех проблем
issueService.getAll(...) => Page<Issue>
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет осуществлен поиск |
startPage |
number | Номер запрашиваемой страницы |
pageSize |
number | Размер страницы |
Получение списка всех проблем с указанным статусом
issueService.getAllWithStatus(...) => Page<Issue>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет осуществлен поиск |
startPage |
number | Номер запрашиваемой страницы |
pageSize |
number | Размер страницы |
status |
string | Статус проблемы. Возможные значения: OPEN , IN_PROGRESS , CLOSED , COMPLETED |
Получение проблемы по локальному номеру
issueService.findByLocalId(...) => Issue | undefined
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта, в котором будет осуществлен поиск |
localId |
number | Номер проблемы в проекте |
Получение проблемы по UUID
issueService.findById(...) => Issue | undefined
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID проблемы |
Комментарий к проблеме
Для взаимодействия с комментариями к проблеме определен объект issueNoteService
Сущность комментарий к проблеме содержит в себе следующие данные:
class IssueNote {...}
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID комментария |
message |
string | Содержимое комментария |
authorId |
string | UUID автора комментария |
issueId |
string | UUID проблемы, содержащей комментарий |
Методы для работы с комментариями к проблемам
Для работы с сущностью комментарий к проблеме существуют следующие методы:
Создание комментария к проблеме
issueService.create: (toCreate: IssueNote) => IssueNote
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
issueId |
string | UUID проблемы, в котором будет создан комментарий |
message |
string | Содержимое комментария |
Изменение комментария к проблеме
issueService.edit(toEdit IssueNote) => IssueNote
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID комментария проблемы |
message |
string | Содержимое комментария |
Получение списка всех комментариев к проблеме
issueService.findAll(...) => Page<IssueNote>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
issueId |
string | UUID проблемы, в которой будет осуществлен поиск |
startPage |
number | Номер запрашиваемой страницы |
pageSize |
number | Размер страницы |
Получение комментария к проблеме по UUID
issueService.findById(...) => IssueNote | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
issueNoteId |
string | UUID комментария проблемы |
Получение количества комментариев в проблеме
issueService.countAll(...) => number
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
issueId |
string | UUID проблемы, в которой будет произведен подсчет комментариев |
Запрос на слияние
Для взаимодействия с запросами на слияние определен объект mergeRequestService
Сущность запрос на слияние содержит в себе следующие данные:
class MergeRequest {...}
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID Запроса на слияние |
localId |
number | Локальный ID ЗнС |
authorId |
string | UUID автора |
targetBranch |
string | Целевая ветка |
targetCommit |
string | Целевой коммит |
sourceBranch |
string | Исходная ветка |
sourceCommit |
string | Исходный коммит |
title |
string | Заголвок ЗнС |
description |
string | Описание ЗнС |
removeSourceBranch |
string | Флаг удаления ветки после слияния |
squashCommit |
string | Слияние одним коммитом |
status |
string | Один из вариантов: “OPENED”, “CLOSED”, “MERGED”, “FAILED”, “CONFLICT”, “CANCELED”, “REVERTED” |
mergeCommit |
string | Коммит слияния |
workInProgress |
boolean | Флаг блокировки Знс |
workInProgressReason |
string | Причина блокировки ЗнС |
Методы для работы с запросами на слияние
Для работы с сущностью запрос на слияние существуют следующие методы:
Создание запроса на слияние
mergeRequestService.create(...) => MergeRequest
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
targetBranch |
string | Целевая ветка |
sourceBranch |
string | Исходная ветка |
removeSourceBranch |
string | Флаг удаления ветки после слияния |
title |
string | Заголовок Знс |
description |
string | Описание ЗнС |
workInProgress |
boolean | Флаг блокировки Знс |
workInProgressReason |
string | Причина блокировки ЗнС |
squashCommit |
boolean | Слияние одним коммитом |
Изменение запроса на слияние
mergeRequestService.edit(toEdit: MergeRequest) => MergeRequest
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
targetProjectId |
string | UUID целевого проекта |
targetBranch |
string | Целевая ветка |
sourceBranch |
string | Исходная ветка |
removeSourceBranch |
string | Флаг удаления ветки после слияния |
title |
string | Заголовок |
description |
string | Описание |
workInProgress |
boolean | Флаг блокировки Знс |
workInProgressReason |
string | Причина блокировки ЗнС |
squashCommit |
boolean | Слияние одним коммитов |
status |
string | Один из вариантов ‘OPENED‘, ‘CLOSED’, ‘MERGED’, ‘FAILED’, ‘CONFLICT‘, ‘CANCELED‘, ‘REVERTED‘ |
Изменение статуса запроса на слияние
mergeRequestService.editStatus(: string, : ) => MergeRequest | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
mergeRequestId |
string | UUID ЗнС |
newStatus |
string | Один из вариантов ‘OPENED‘, ‘CLOSED’, ‘MERGED’, ‘FAILED’, ‘CONFLICT‘, ‘CANCELED‘, ‘REVERTED‘ |
Получение списка запросов на слияние по исходному проекту
mergeRequestService.findAllBySourceProject(...) => Page<MergeRequest>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
startPage |
number | Запрашиваемая страница |
pageSize |
number | Размер страницы |
Получение списка запросов на слияние по целевому проекту
mergeRequestService.findAllByTargetProject(...) => Page<MergeRequest>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
startPage |
number | Запрашиваемая страница |
pageSize |
number | Размер страницы |
Поиск запроса на слияние по UUID
mergeRequestService.findById(...) => MergeRequest | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID ЗнС |
Поиск запроса на слияние по локальному номеру
mergeRequestService.findByLocalId(...) => MergeRequest | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
localId |
number | Локальный ID ЗнС |
projectId |
string | UUID проекта |
Проверка существования запроса на слияние
mergeRequestService.exists(...) => boolean
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
sourceProjectUuid |
string | UUID исходного проекта |
sourceBranch |
string | Исходная ветка |
targetProjectUuid |
string | UUID целевого проекта |
targetBranch |
string | Целевая ветка |
Проверка возможности слить запрос на слияние
mergeRequestService.canMerge(id: string) => boolean
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID ЗнС |
Дискуссия к запросу на слияние
Для взаимодействия с дискуссиями к запросам на слияние определён объект noteService
Сущность дискуссия к запросам на слияние содержит в себе следующие данные:
class Note {...}
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID дискуссии |
mergeRequestId |
string | UUID ЗнС |
discussionId |
string | UUID дискуссии |
baseCommit |
string | Исходный коммит |
targetCommit |
string | Целевой коммит |
startCommit |
string | |
newLine |
number | |
oldLine |
number | |
newPath |
string | |
oldPath |
string | |
resolvable |
boolean | |
resolved |
boolean | |
type |
string | |
message |
string | Содержание дискуссии |
authorId |
string | UUID автора |
diff |
string | Изменения |
highlightLanguage |
string | Язык программирования для подсветки кода |
Методы для работы с дискуссиями к запросу на слияние
Для работы с сущностью дискуссия к запросам на слияние существуют следующие методы:
Создание дискуссии к запросу на слияние
noteService.create(toCreate: Note) => Note
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
message |
string | Сообщение для дискуссии |
highlightLanguage |
string | Язык программирования для подсветки кода |
resolved |
boolean | Статус дискуссии: открыта/закрыта |
mergeRequestId |
string | UUID ЗнС |
Изменение дискуссии к запросу на слияние
noteService.edit(toEdit: Note) => Note
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID дискуссии |
sourceProjectId |
string | UUID исходного проекта |
targetProjectId |
string | UUID целевого проекта |
targetBranch |
string | Целевая ветка |
sourceBranch |
string | Исходная ветка |
removeSourceBranch |
boolean | Флаг для удаления ветки после слияния |
title |
string | Заголовок |
description |
string | Описание |
workInProgress |
boolean | Флаг, фиксирующий ЗнС в работе |
workInProgressReason |
string | Сообщение для блокировки ЗнС |
squashCommit |
boolean | Слить запрос одним коммитом |
Создание ответа в дискуссии к запросу на слияние
noteService.reply(...) => Note
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID дискуссии |
message |
string | Ответ для дискуссии |
Закрытие дискуссии к запросу на слияние
noteService.resolve(id: string) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID дискуссии |
Открытие дискуссии к запросу на слияние
noteService.unresolve(id: string) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID дискуссии |
Получение списка всех дискуссий к запросу на слияние
findAllInMergeRequest(...) => Page<Note>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
mergeRequestId |
string | UUID ЗнС |
startPage |
number | Запрашиваемая страница |
pageSize |
number | Размер старницы |
Получение дискуссии к запросу на слияние по UUID
noteService.findById(id: string) => Note | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID дискуссии |
Конвейер
Для взаимодействия с конвейером определен объект pipelineService
Сущность конвейер содержит в себе следующие данные:
class Pipeline {...}
Название | Тип данных | Описание |
---|---|---|
id |
string | |
status |
string | Один из вариантов: “CREATED”, “PENDING”, “RUNNING”, “SUCCESS”, “FAILED”, “CANCELED”, “SKIPPED”, “MANUAL”, “SCHEDULED”, “PREPARING”, “WAITING_FOR_RESOURCE” |
duration |
number | Время выполнения |
projectId |
string | UUID проекта |
userId |
string | UUID пользователя, запустившего конвейер |
localId |
number | Локальный ID конвейера |
mergeRequestId |
string | UUID запроса на слияние |
commitId |
string | Хеш коммита |
beforeCommitId |
string | Хеш предыдущего коммита |
sourceCommitId |
string | Хеш исходного коммита |
ref |
string | Указатель проекта |
isTag |
boolean | Запущен из тега |
yamlErrors |
string | Ошибки в файле конфигурации |
source |
string | Источник запуска |
configSource |
number | Числовое обозначение источника |
failureReason |
string | Причина оишбки конвейера |
startedAt |
string | Время запуска конвейера |
finishedAt |
string | Время завершения конвейера |
createdAt |
string | Время создания конвейера |
isMergedResults |
boolean | Конвейер является результирующим |
Методы для работы с конвейерами
Для работы с сущностью конвейер существуют следующие методы:
Создание конвейера
pipelineService.create(...) => Pipeline | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
ref |
string | Указатель в проекте |
Создание пустого конвейера
Данный конвейер невозможно запустить в GitFlic
pipelineService.createBlank(projectId: string, ref: string) => Pipeline
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
ref |
string | Указатель в проекте |
Получение списка всех конвейеров
pipelineService.findAllByProject(projectId: string, startPage: number, pageSize: number) => Page<Pipeline>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
startPage |
number | Запрашиваемая страница |
pageSize |
number | Размер страницы |
Получение списка конвейеров по ветке или тегу
pipelineService.findByProjectIdAndRef(...) => Page<Pipeline>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
ref |
string | Указатель в проекте |
startPage |
number | Запрашиваемая страница |
pageSize |
number | Размер страницы |
Получение конвейера по локальному номеру
pipelineService.findByLocalId(...) => Pipeline | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
projectId |
string | UUID проекта |
localId |
number | Локальный ID конвейера |
Получение конвейера по UUID
pipelineService.findById(...) => Pipeline | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID конвейера |
Получение списка конвейеров в запросе на слияние
pipelineService.findByMergeRequestId(...) => Page<Pipeline>
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
mergeRequestId |
string | UUID Запроса на слияние |
startPage |
number | Запрашиваемая страница |
pageSize |
number | Размер страницы |
Перезапуск конвейера
pipelineService.restart(...) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
id |
string | UUID конвейера |
Отмена конвейера
pipelineService.cancelPipeline(...) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
pipelineId |
string | UUID конвейера |
Изменение статуса конвейера
pipelineService.changeStatus(...) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
pipelineId |
string | UUID конвейера |
status |
string | Один из вариантов “CREATED”, “PENDING”, “RUNNING”, “SUCCESS”, “FAILED”, “CANCELED”, “SKIPPED”, “MANUAL”, “SCHEDULED”, “PREPARING”, “WAITING_FOR_RESOURCE” |
Обновление времени начала выполнения конвейера
pipelineService.setStartTime(...) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
pipelineId |
string | UUID конвейера |
startTimeMillis |
number | UnixTime до тысячных долей секунды |
Обновление времени окончания выполнения конвейера
pipelineService.setFinishTime(...) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
pipelineId |
string | UUID конвейера |
finishTimeMillis |
number | UnixTime до тысячных долей секунды |
Изменение времени выполнения конвейера
pipelineService.setExecutionTime(...) => void
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
pipelineId |
string | UUID конвейера |
duration |
number | Время выполнения в милисекундах |
Создание стадии
pipelineService.createStage(...) => Stage
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
pipelineId |
string | UUID конвейера |
name |
string | Название стадии |
pipstatuselineId |
string | Один из вариантов “CREATED”, “PENDING”, “RUNNING”, “SUCCESS”, “FAILED”, “CANCELED”, “SKIPPED”, “MANUAL”, “SCHEDULED”, “PREPARING”, “WAITING_FOR_RESOURCE”, “WARNING” |
Изменение статуса стадии
pipelineService.changeStageStatus(...) => Stage | undefined
Необходимо передать следующие значения в методе
Название | Тип данных | Описание |
---|---|---|
stageId |
string | UUID стадии |
pipstatuselineId |
string | Один из вариантов “CREATED”, “PENDING”, “RUNNING”, “SUCCESS”, “FAILED”, “CANCELED”, “SKIPPED”, “MANUAL”, “SCHEDULED”, “PREPARING”, “WAITING_FOR_RESOURCE”, “WARNING” |
http запросы
На текущий момент поддерживаются 2 метода:
http.get(url: string, config?: RequestConfig) => HttpResponse
http.post(url: string, body: any, config?: RequestConfig) => HttpResponse
где RequestConfig и HttpResponse - следующие классы (написаны на typescript):
interface HttpRequestConfig {
url?: string;
method?: string;
baseUrl?: string;
headers?: { [key: string]: string[] };
params?: { [key: string]: string[] };
data?: any;
auth?: {username: string, password: string}
}
interface HttpResponse {
body: any;
isSuccessful: boolean;
code: number;
message: string;
headers: { [key: string]: string[] };
}
Пример использования:
Пример GET-запроса к REST-API Gitflic
const url = '${baseurl}/user/me'
req = http.get(url,{ headers: { "Authorization": `token ${gitflicApiToken}` }});
console.log(JSON.stringify(req))
req.code
Пример POST-запроса, не требующий передачи body
const url = ${exampleUrl}
req = http.get(url,{},{headers: { "Authorization": `token ${token}` }});
console.log(JSON.stringify(req))
req.code
Права
Проверка на права выполняется для пользователя, который создал скрипт. То есть когда в пределах скрипта создаётся, например, конвейер, проводится проверка на право создания для автора скрипта
Переменные
Для определения пользовательских переменных существуют переменные. Они создаются отдельно в пределах проекта, в настройке скрипта указываются, какие из них будут в нём доступны
Триггеры
Триггеры это то, из-за чего запускаются скрипты. Всего есть несколько видов, для каждого из которых определены свои дополнительные переменные окружения
REST-API
Триггер указывающий, что скрипт был вызван из REST-API GitFlic. Для скриптов указана переменная request
типа string
, содержащая тело запроса
POST {baseurl}/rest-api/project/{userAlias}/{projectAlias}/script/{uuid}
Запрос возвращает следующую информацию:
Значение | Тип | Описание |
---|---|---|
executionUuid |
String | UUID выполения |
scriptUuid |
String | UUID скрипта |
triggerType |
String | Тип триггера |
triggerName |
String | Название триггера |
triggeringUserUuid |
String | UUID пользователя, который запустил скрипт |
executionStartTimestamp |
long | Время начала выполнения скрипта |
executionEndTimestamp |
long | Время окончания выполнения скрипта |
queueAppendTimestamp |
long | Время добавления. вочередь выполнения |
result |
String | Результат |
returnedValue |
String | Возвращенное значение |
Событие сервиса
Триггеры событий сервиса запускают скрипты по событию GitFlic. Ниже описаны события, по которым возможно запустить скрипты, указаны также дополнительные переменные окружения для каждого события
NEW_PIPELINE
(новый конвейер),
DELETE_PIPELINE
(удаление конвейера),
SUCCESS_PIPELINE
(удачно завершившийся конвейер),
FAIL_PIPELINE
(неудачно завершившийся конвейер):
Название | Тип | Описание |
---|---|---|
userId | string | UUID пользователя, который вызвал событие |
status | string | Статус конвейера на момент создания события |
localId | integer | Локальный ID конвейера |
ref | string | Референс, на котором был запущен конвейер |
isTag | boolean | Флаг, указывающий, что референс является тег |
commitAfter | string | Коммит, на котором был запущен конвейер |
projectId | string | UUID проекта, к которому относится конвейер |
authorUsername | string | Псевдоним пользователя, который вызвал событие |
NEW_MERGE_REQUEST_NOTE
(создание комментария в дискуссии ЗнС):
Название | Тип | Описание |
---|---|---|
projectId | string | UUID проекта, к которому относится ЗнС |
userId | string | UUID автора комментария |
message | string | Содержание комментария |
authorUsername | string | Псевдоним автора комментария |
noteId | string | UUID созданного комментария |
status | string | Статус комментария, один из вариантов: ”note.resolved”, “note.unresolved" |
MERGE
(слияние ЗнС),
UPDATE_MERGE_REQUEST
(обновление ЗнС),
CLOSE_MERGE_REQUEST
(закрытие ЗнС),
CANCELED_MERGE_REQUEST
(отмена ЗнС),
NEW_MERGE_REQUEST
(создание ЗнС):
Название | Тип | Описание |
---|---|---|
description | string | Опсиание ЗнС |
localId | integer | Локальный ID ЗнС |
sourceProjectId | string | UUID проекта, к которому относится ЗнС |
targetProjectId | string | UUID проекта, в который направлен ЗнС |
authorId | string | UUID автора ЗнС |
targetBranch | string | Целевая ветка ЗнС |
sourceBranch | string | Исходная ветка ЗнС |
status | string | Статус ЗнС на момент создания события, один из вариантов: "OPENED”, “CLOSED”, “MERGED”, “FAILED”, “CONFLICT”, “CANCELED”, “REVERTED” |
authorUsername | string | Псевдоним автора ЗнС |
assignedUsers | string[] | Список ответственных в ЗнС |
NEW_ISSUE_NOTE
(создание комментария в проблеме):
Название | Тип | Описание |
---|---|---|
authorId | string | UUID автора комментария |
message | string | Содержание комментария |
issueLocalId | integer | Локальный ID проблемы |
authorUsername | string | Псевдоним автора проблемы |
projectId | string | UUID проекта, к которому относится проблема |
CLOSE_ISSUE
(закрытие проблемы),
UPDATE_ISSUE
(обновление проблемы),
NEW_ISSUE
(создание проблемы):
Название | Тип | Описание |
---|---|---|
localId | integer | локальный ID проблемы |
projectId | string | UUID проблемы, к которой относится проблема |
authorId | string | UUID автора проблемы |
title | string | Заголовок проблемы |
authorUsername | string | Псевдоним автора проблемы |
assignedUsers | string[] | Псевдонимы ответственных за проблему |
status | string | статус проблемы на момент создания события, один из вариантов ”OPEN”, “IN_PROGRESS”, “CLOSED”, “COMPLETED” |
UPDATE_BRANCH
(обновление ветки),
DELETE_BRANCH
(удаление ветки),
NEW_BRANCH
(создание ветка),
DELETE_TAG
(удаление тега),
NEW_TAG
(создание тега),
PULL
(pull-запрос),
PUSH
(push-запрос):
Название | Тип | Описание |
---|---|---|
ref | string | git-ссылка на тег или ветку |
commitBefore | string | последний коммит в ветке до пуша |
commitAfter | string | последний коммит в ветке после пуша |
projectId | string | UUID проекта, в котором произошло событие |
userId | string | UUID пользователя, который совершил действие |
Ручной запуск
Триггер, указывающий, что скрипт был вызван вручную в самом GitFlic (по нажатию на кнопку). Дополнительные переменные не определяются
Тестовый запуск
Триггер, указывающий, что скрипт был вызван в тестовой среде. Дополнительные переменные не определяются
Ограничения
Определены ограничения на ресурсы среды выполнения, а также дополнительные ограничения со стороны сервисов.
Все настройки управляются через файл конфигурации (application.properties)
Описание настройки | Название в файле конфигурации | Значение по умолчанию |
---|---|---|
Максимальное количество вызовов методов сервиса (для каждого свой счётчик) | scripts.limits.max-calls-per-context |
10 |
Максимальный размер стандартного вывода в байтах | scripts.limits.output.max-script-output-size-bytes |
4096 |
Максимальное количество выполняемых statement | scripts.resources.statement.limit |
1000 |
Максимальная глубина AST | scripts.limits.max-ast-depth |
64 |
Максимальное количество фреймов на стеке | scripts.limits.max-stack-frames |
64 |
Максимальное время выполнения скрипта в миллисекундах | scripts.limits.execution-timeout-milliseconds |
1000 |
Примеры
var issueNoteCount = issueNoteService.countAll(issueId);
issueNoteCount
// Вывод количества комментариев в Проблеме
// Необходимо дополнительно объявить переменную issueId
var newPipe = pipelineService.create(projectId, "master");
newPipe.id
// Результатом выполнения скрипта будет значение UUID созданного конвейера
// Необходимо дополнительно объявить переменную projectId