Короткий ответ
Required status checks не дают смёржить pull request, пока указанные проверки (тесты, линтер, сборка) не завершатся успешно; это защищает основную ветку от попадания заведомо сломанного кода. Отключение таких проверок позволит мёрджить код даже при падающих тестах, повышая риск сломать main и, как следствие, пайплайны и деплои для всей команды.
Как это работает подробнее
в настройках защиты ветки (branch protection rules) указывается список статус-чеков, которые GitHub/GitLab должны получить от CI как «success», прежде чем кнопка мерджа станет активной. Это работает независимо от решения ревьюера — даже одобренный PR нельзя слить, если чек не прошёл.
Пример кода
example.txt
Merge blocked
Required status check "CI / test" has failed.
Resolve the issue before merging.Что использовать на практике
- На практике. required checks — один из самых дешёвых и эффективных способов поддерживать `main` в рабочем состоянии, особенно в командах с частыми мерджами от разных разработчиков. Их обычно дополняют требованием хотя бы одного одобрения код-ревью.
- Пример. Ожидаемое поведение: кнопка merge в интерфейсе остаётся неактивной или помечена предупреждением, пока разработчик не исправит код так, чтобы джоба `CI / test` завершилась успешно (или администратор репозитория explicit не обойдёт правило, что обычно не рекомендуется для обычного рабочего процесса).
Подводные камни
- Частые ошибки. отключают проверку «временно, чтобы успеть до дедлайна» и забывают включить обратно; делают обязательной слишком нестабильную (flaky) проверку, из-за чего разработчики начинают игнорировать реальные провалы, считая их «просто флакающим тестом».