Компьютеры · Инструкция
GitHub Actions: как отменять предыдущий run при новом push через concurrency
Без concurrency несколько запусков одного workflow могут работать параллельно и тратить минуты или конкурировать за один
Короткий ответ
Добавьте `concurrency` с группой, привязанной к workflow и ref, и `cancel-in-progress: true`. Тогда новый запуск в той же группе отменит уже выполняющийся run, а разные ветки можно оставить независимыми.
Что делать
- Выберите уровень: Для всего workflow задайте `concurrency` на верхнем уровне YAML; для одного job — внутри конкретного job.
- Сформируйте группу: Для разделения по веткам используйте, например, `group: ${{ github.workflow }}-${{ github.ref }}`.
- Включите отмену: Добавьте `cancel-in-progress: true`.
- Проверьте уникальность: Если несколько workflow не должны отменять друг друга, включите имя workflow в ключ группы.
- Проверьте поведением: Сделайте два быстрых push в одну ветку: старый run должен перейти в Cancelled, новый — продолжить выполнение.
Важно
Не используйте одинаковую статическую concurrency-group для независимых workflow, иначе они смогут отменять друг друга.
Что учитывать
Не используйте одинаковую статическую concurrency-group для независимых workflow, иначе они смогут отменять друг друга.
Источники и проверка
Фактическая часть сверена по первичным источникам (в т.ч. Control the concurrency of workflows and jobs). Пример и формулировки — редакция N1RO на 2026-09-17.