Как заблокировать объединение PR в случае неудачного результата внешнего теста
Каждый раз, когда создается новый PullRequest для объединения ветки A с веткой B, мне нужно запустить несколько тестов с помощью внешнего инструмента. Это может занять несколько часов.
При создании PR рабочий процесс отправляет действие GitHub, которое создает ВНЕШНЕЕ ЗАДАНИЕ во внешнем инструменте. Короче говоря, это единственный способ работы этого внешнего инструмента.
Итак, в чем моя проблема? Мне нужен способ заблокировать PR во время выполнения внешнего теста И получить уведомление, когда будет доступен окончательный результат.
Наивный подход был бы:
- PR создан, запускается действие github
- Действие github отправляет POST на внешний инструмент, создавая там задание.
- Действие github ожидает (объединяет каждые X секунд), чтобы проверить, есть ли у нас результат.
Я знаю, что наборы проверок могут быть подходящим вариантом, но для этого необходимо создать приложение Github.
Есть ли лучший способ сделать это?
1 ответ
Самый простой способ, вероятно, — использовать статус фиксации . Вам нужен хеш последнего коммита в PR, а затем вы можете установить статусы; например, когда начался длительный тест, что-то вроде (с использованием GitHub CLI)
gh api repos/{owner}/{repo}/statuses/COMMITSHA \
-f state='pending' \
-f context='External job' \
-f description='Running tests'
Затем вы можете сделать это обязательной проверкой, чтобы во время выполнения внешних тестов PR имел ожидающую проверку, например
и позже, когда испытания закончатся, либо
gh api repos/{owner}/{repo}/statuses/COMMITSHA \
-f state='failure' \
-f context='External job' \
-f description='Tests failed'
при неудаче
или
gh api repos/{owner}/{repo}/statuses/COMMITSHA \
-f state='success' \
-f context='External job' \
-f description='Tests passed'
об успехе.