Как запустить рабочий процесс GitHub Action для каждого успешного коммита - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу запустить рабочий процесс GitHub Actions для каждого успешного коммита (например, после успешного запуска всех наборов проверок).

Похоже, что события check_suite будут запускаться для каждого отдельного человека.проверить комплект и не содержать информации о других комплектах.Я хочу дождаться всех зарегистрированных контрольных пакетов.

Событие status кажется именно тем, что я хочу:

Статусы могут включать контекст для указания того, чтосервис предоставляет этот статус.Например, у вас могут быть push-статусы службы непрерывной интеграции с контекстом ci, а инструмент аудита безопасности push-статусы с контекстом безопасности.Затем вы можете использовать комбинированную конечную точку состояния, чтобы получить весь статус для фиксации.

Но status живет полностью независимо от событий check_suites, и большинство служб CI теперь используют check_suites (включая сами действия GitHub), а не status.

Как я могу с помощью рабочего процесса GitHub Actions проверить, что все check_suites завершены и коммит успешно прошел все проверки и тесты?

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете использовать GitHub API для вывода списка контрольных пакетов, принадлежащих реф: https://octokit.github.io/rest.js/#octokit-routes-checks-list-suites-for-ref.

Таким образом, в вашем действии (инициируемом check_suite) вы можете перечислить все наборы для текущегоref, проверьте, все ли они успешны, а затем запустите ваш код.

Если вы создаете действие javascript, оно может выглядеть так:

import * as github from "@actions/github";

const response = await client.checks.listSuitesForRef({
  owner: github.context.repo.owner,
  repo: github.context.repo.repo,
  ref: sha
});

const passes = response.data.check_suites.every(...)

if (passes) { ... }

Основной недостаток этого подхода заключается вчто само это действие является набором проверок, принадлежащим текущему коммиту, поэтому оно появится в response.data.check_suites (и никогда не будет успешным на этом этапе ... потому что оно все еще выполняется!).У меня пока нет решения для этой части ...

...