Защита веток
Защита веток Apothem на main — гейт ревью, гейтинг через проверки статуса и ограничения push.
Ветка main Apothem защищена защитой веток GitHub после публикации единственного свежего коммита релиза. Защита обеспечивает соблюдение дисциплины набора изменений, объявленной в rules/production-ready-prs.md, и питает проверки Branch-Protection и Code-Review OpenSSF Scorecard для будущей работы.
Объявление набора правил
| Параметр | Значение | Обоснование |
|---|---|---|
| Цель | main | Защищает публичную ветку по умолчанию. |
| Статус применения | active | Не в режиме пробного прогона. |
| Требовать pull request перед слиянием | ✅ | Прямые push в main заблокированы. |
| Требуемые одобряющие ревью | 1 | Минимальный гейт человеческого ревью для нового проекта с единственным сопровождающим. |
| Отклонять устаревшие одобрения при новых коммитах | ✅ | Force-push после одобрения повторно запускает ревью. |
| Требовать ревью от Code Owners | Отложено | Включение этого до присоединения второго сопровождающего может заблокировать PR единственного сопровождающего. |
| Требовать одобрения самого недавнего проверяемого push | ✅ | Последний отправленный коммит должен нести одобрение. |
| Требовать разрешения обсуждений | ✅ | Открытые треды ревью блокируют слияние. |
| Требовать прохождения проверок статуса | ✅ | Workflow CI + Scorecard + CodeQL + pip-audit. |
| Обязательные проверки статуса | Текущие основные проверки | Обязательный список обновляется из последнего зелёного коммита релиза. |
| Требовать актуальности веток | ✅ | Предотвращает регрессии из-за устаревшего слияния. |
| Требовать подписанных коммитов | Рекомендуется | Локальные коммиты релиза подписаны; полное применение ждёт, пока документация по онбордингу участников не опишет настройку SSH/GPG. |
| Требовать линейной истории | ✅ | Сохраняет понятность однолинейной публичной истории. |
| Блокировать force-push | ✅ | Перезапись истории на main заблокирована. |
| Разрешить удаление | ❌ | Ветку main нельзя удалить. |
Ограничение единственного сопровождающего
GitHub не позволяет файлам репозитория создавать историю человеческих ревью. Поэтому репозиторий применяет самую сильную незаблокирующую защиту веток для своей текущей модели сопровождающего: одно одобряющее ревью, отклонение устаревших ревью, одобрение последнего push, разрешение обсуждений, проверки статуса, линейная история, а также запрет удаления ветки или force-push. Когда присоединится второй сопровождающий, ревью CODEOWNERS и минимум из двух рецензентов станут более сильной настройкой.
Требования к проверкам статуса
Четыре жёстко гейтящие проверки статуса, объявленные выше:
ci— полная тестовая матрица + ruff + mypy + bandit + Trivy + pip-audit по разрешённому дереву зависимостейScorecard— запуск OpenSSF Scorecard без регрессии по отдельной проверкеCodeQL— пакеты запросовsecurity-extendedдляpython+actionspip-audit— еженедельное + по каждому PR сканирование уязвимостей по разрешённому дереву зависимостей
Любой другой workflow может сообщать статус, но его результат не гейтит слияние, если он не повышен до списка обязательных проверок.
Ритм аудита
Этот файл пересматривается при каждом аудите безопасности и на каждой контрольной точке релиз-инженерии. Расхождение между этим файлом и фактической конфигурацией защиты веток является находкой высокой степени серьёзности.
Ссылки
- OpenSSF Scorecard — Branch-Protection check
- GitHub — About protected branches
- Apothem CODEOWNERS — владение ревью с областью по пути
rules/production-ready-prs.md§1 — дисциплина одного набора изменений, которую обеспечивает этот набор правил