n1ro°
RU

Компьютеры · Инструкция

GitHub Actions: как отменять предыдущий run при новом push через concurrency

Без concurrency несколько запусков одного workflow могут работать параллельно и тратить минуты или конкурировать за один

Редакция N1RO · Проверено

Короткий ответ

Добавьте `concurrency` с группой, привязанной к workflow и ref, и `cancel-in-progress: true`. Тогда новый запуск в той же группе отменит уже выполняющийся run, а разные ветки можно оставить независимыми.

Что делать

  1. Выберите уровень: Для всего workflow задайте `concurrency` на верхнем уровне YAML; для одного job — внутри конкретного job.
  2. Сформируйте группу: Для разделения по веткам используйте, например, `group: ${{ github.workflow }}-${{ github.ref }}`.
  3. Включите отмену: Добавьте `cancel-in-progress: true`.
  4. Проверьте уникальность: Если несколько workflow не должны отменять друг друга, включите имя workflow в ключ группы.
  5. Проверьте поведением: Сделайте два быстрых push в одну ветку: старый run должен перейти в Cancelled, новый — продолжить выполнение.

Важно

Не используйте одинаковую статическую concurrency-group для независимых workflow, иначе они смогут отменять друг друга.

Что учитывать

Не используйте одинаковую статическую concurrency-group для независимых workflow, иначе они смогут отменять друг друга.

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Control the concurrency of workflows and jobs). Пример и формулировки — редакция N1RO на 2026-09-17.