Защита веток
Защита веток Apothem на main: действующее правило защиты, его обязательные проверки статуса и проверки, ожидающие добавления.
Ветка main Apothem защищена классическим правилом защиты веток GitHub. В репозитории нет наборов правил. Защита обеспечивает соблюдение дисциплины набора изменений, объявленной в rules/production-ready-prs.md, и питает проверки Branch-Protection и Code-Review OpenSSF Scorecard.
Эта страница точно фиксирует действующие настройки в том виде, в каком они в последний раз были прочитаны из API GitHub 2026-10-07. Настройка, которую сопровождающий намерен применить, но ещё не применил, появляется только в разделе Ожидающие изменения сопровождающего.
Настройки защиты
| Настройка | Поле API | Действующее значение | Эффект |
|---|---|---|---|
| Требовать pull request перед слиянием | required_pull_request_reviews (присутствует) | ✅ | Изменения попадают в main через pull request. |
| Требуемые одобряющие рецензии | required_approving_review_count | 0 | Pull request сливается без одобряющей рецензии. См. Модель единственного сопровождающего. |
| Отклонять устаревшие одобрения при новых коммитах | dismiss_stale_reviews | ✅ | Одобрение, данное до нового push, больше не учитывается. |
| Требовать рецензии от Code Owners | require_code_owner_reviews | ❌ | Включение этой настройки до присоединения второго сопровождающего приводит к взаимоблокировке pull request единственного сопровождающего. |
| Требовать одобрения самого последнего push, доступного для рецензии | require_last_push_approval | ❌ | GitHub требует, чтобы это одобрение исходило не от автора push, а единственный сопровождающий не может его обеспечить. |
| Требовать прохождения проверок статуса | required_status_checks | ✅ | 12 контекстов, перечисленных в разделе Обязательные проверки статуса, должны пройти. |
| Требовать актуальности веток перед слиянием | required_status_checks.strict | ❌ | Pull request может быть слит, когда его обязательные проверки прошли относительно более старого main. Затем рабочие процессы, запускаемые при push в main, тестируют результат слияния. |
| Требовать разрешения обсуждений перед слиянием | required_conversation_resolution | ✅ | Открытые обсуждения рецензии блокируют слияние. |
| Требовать подписанных коммитов | required_signatures | ❌ | Коммиты релизов подписываются локально. Принудительное применение откладывается до тех пор, пока документация по подключению участников не опишет настройку подписи SSH или GPG. |
| Требовать линейной истории | required_linear_history | ✅ | Сохраняет публичную историю main единой линией. |
| Заблокировать ветку | lock_branch | ❌ | main принимает слияния. |
| Не разрешать обход вышеуказанных настроек | enforce_admins | ❌ | Вышеуказанные настройки не распространяются на администратора репозитория. Администратор может сливать без обязательных проверок или отправлять push напрямую в main. |
| Разрешить force-push | allow_force_pushes | ❌ | Force-push в main заблокирован для всех, включая администраторов. |
| Разрешить удаление | allow_deletions | ❌ | Никто не может удалить main, включая администраторов. |
Модель единственного сопровождающего
У репозитория один сопровождающий. GitHub указывает: «Авторы pull request не могут одобрять собственные pull request». Поэтому требуемое число одобрений больше 0 заблокировало бы каждый pull request сопровождающего. Действующее правило требует pull request с 0 одобрений и оставляет enforce_admins выключенным.
Для любого, у кого нет прав администратора, слияние по-прежнему требует зелёных обязательных проверок статуса, разрешённых обсуждений рецензии и линейной истории. Force-push и удаление main остаются заблокированными для каждой учётной записи.
Когда присоединится второй сопровождающий, более строгими настройками будут как минимум одно обязательное одобрение, одобрение последнего push, рецензия CODEOWNERS и включённый enforce_admins. Церемония слияния для единственного сопровождающего применяется только к защите, которая требует одобрения и применяет это требование к администраторам.
Обязательные проверки статуса
Каждый из этих 12 контекстов обязателен, а его источником является GitHub Actions (ID приложения 15368):
quality / ubuntu-latest / py3.10
quality / ubuntu-latest / py3.11
quality / ubuntu-latest / py3.12
quality / ubuntu-latest / py3.13
quality / ubuntu-latest / py3.14
quality / windows-latest / py3.10
quality / windows-latest / py3.11
quality / windows-latest / py3.12
quality / windows-latest / py3.13
quality / windows-latest / py3.14
coverage
Require Signed-off-by| Контекст | Рабочий процесс и задание | Как он сообщает статус для каждого pull request |
|---|---|---|
quality / <os> / py<ver> (10) | ci.yml, задание quality | ci.yml запускается, когда pull request затрагивает путь кода или конфигурации. ci-docs-stub.yml сообщает те же контексты для pull request, затрагивающего только документацию. |
coverage | ci.yml, задание coverage | Так же, как quality. |
Require Signed-off-by | dco.yml, задание dco | Его триггер pull request не имеет фильтра paths, поэтому он запускается на каждом pull request в main. |
Ячейка предрелизной версии quality / ubuntu-latest / py3.15 выполняется в ci.yml с continue-on-error и не является обязательной. Любой другой рабочий процесс, включая CodeQL, Scorecard и pip-audit, может сообщать статус, но его результат не контролирует слияние, если его контекст не добавлен в этот список.
Ожидающие изменения сопровождающего
Сопровождающий намерен добавить эти 25 контекстов в список обязательных. Заголовок каждого рабочего процесса объявляет задание обязательной проверкой, а его триггер pull request не имеет фильтра paths, поэтому он запускается на каждом pull request в main. Пока контекст не добавлен, сбой в нём не блокирует слияние.
clean-install-gate.yml, 7 контекстов:
installer-shell-compat / ubuntu-latest
installer-shell-compat / macos-latest
installer-shell-compat / windows-latest
clean-install-gate / ubuntu-latest
clean-install-gate / windows-latest
wheel-smoke / ubuntu-latest
wheel-smoke / windows-latestharness-matrix.yml, 17 контекстов, по одному matrix (<adapter>) на каждый адаптер в матрице задания:
matrix (antigravity)
matrix (claude-code)
matrix (codebuddy)
matrix (codex)
matrix (cursor)
matrix (gemini-cli)
matrix (github-copilot)
matrix (glm)
matrix (hermes)
matrix (kimi-code)
matrix (kiro)
matrix (open-claw)
matrix (opencode)
matrix (qwen-code)
matrix (trae)
matrix (windsurf)
matrix (zed)installer-lint.yml, 1 контекст:
installer-lintКак только контексты harness-matrix.yml станут обязательными, регистрация нового адаптера добавит контекст matrix (<adapter>), и список обязательных получит его в том же изменении. «Требовать актуальности веток перед слиянием» остаётся выключенным. Когда ожидающее изменение применяется, перенесите его в разделы о действующих настройках выше в том же изменении.
Ритм аудита
Этот файл пересматривается при каждом аудите безопасности и на каждой контрольной точке инженерии релизов. Расхождение между этим файлом и фактической конфигурацией защиты веток является находкой высокой степени серьёзности. Прочитайте действующую конфигурацию с помощью:
gh api repos/ahmed-g-gad/apothem/branches/main/protection
gh api repos/ahmed-g-gad/apothem/rulesetsСсылки
- OpenSSF Scorecard — проверка Branch-Protection
- GitHub — О защищённых ветках
- GitHub — Управление правилом защиты веток
- GitHub — Одобрение pull request с обязательными рецензиями
- Apothem CODEOWNERS — владение рецензированием с областью по путям
- Рабочие процессы CI Apothem — рабочие процессы, из которых поступает каждый обязательный контекст
rules/production-ready-prs.md§1 — дисциплина одного набора изменений, которую обеспечивает эта защита