Об этом проекте

Extra CODEOWNERS — это самостоятельно размещаемое GitHub App для команд, которые хотят автоматизировать одобрение типовых pull-запросов согласно политике CODEOWNERS. Она публикует обязательную проверку, принимающую либо человеческое одобрение CODEOWNER, либо одобрение явно зарегистрированного GitHub App. Репозиторий также может выбрать режим, при котором автор подходящего pull-запроса рассматривается как доказательство одобрения со стороны человека-CODEOWNER. Проект появился потому, что правило GitHub Require review from Code Owners понимает людей и команды, но не позволяет GitHub App выступать от их имени. Если App, такой как Stampbot, уже знает, что pull-запрос является типовым, GitHub всё равно ожидает одобрения человека. Extra CODEOWNERS заменяет это единственное решение проверкой. Она оценивает каждое отдельное эффективное множество владельцев независимо. Каждое представленное множество должно пройти. Один pull-запрос может использовать человеческое одобрение для одного множества владельцев и одобрение App для другого. Одобрение App допустимо только тогда, когда организация зарегистрировала именно этот App, репозиторий подключился, делегирование охватывает изменённый путь и effective CODEOWNER, присутствуют необходимые метки, одобрение относится к текущей голове pull-запроса, и никакая политика организации или встроенное ограничение не делает путь только человеческим. Pull-запрос, сочетающий делегированные и неделегированные принадлежащие пути, всё ещё требует человеческого покрытия для каждого неделегированного множества владельцев. Путь без совпадения effective CODEOWNERS не создаёт требования CODEOWNERS, хотя обычные одобрения и другие правила по-прежнему применяются. GitHub сохраняет обычные правила pull-requests: минимальное количество одобрений, обработка устаревших отзывов, подписанные коммиты и смежные обязательные проверки. Extra CODEOWNERS предназначена заменить только Require review from Code Owners. Публичный контракт GitHub не указывает, засчитывается ли отзыв стороннего App в минимум обычных одобрений, поэтому такую комбинацию следует тестировать во временном репозитории перед эксплуатацией. Нулевой минимум может потребовать человеческого участия даже при успешной проверке Extra CODEOWNERS. App не публикует отзывы, не сливает pull-запросы, не предоставляет доступ другому App и не редактирует CODEOWNERS. Она читает данные GitHub и публикует один Check Run. Проверку следует воспринимать как результат политики, а не как отзыв. Extra CODEOWNERS отображается в области проверок GitHub, тогда как обычное количество одобрений появляется в области отзывов. Командам следует сохранять обычное правило минимального количества отзывов при необходимости. Проверка асинхронна. Когда одобрение отозвано или изменено, прежний успех остаётся видимым, пока GitHub не доставит событие, и App не сбросит и не переоценит проверку. Согласование исправляет пропущенные доставки, но не является мгновенным механизмом отзыва. Нативное правило кода GitHub следует сохранить там, где недопустимо окно задержки. Делегирование разделено между двумя областями политик. CODEOWNERS определяет, какие люди или команды владеют каждым путём. Политика организации определяет, какие Apps доверены вообще, а также пути, которые App не может покрывать. Политика репозитория определяет, какой зарегистрированный App может покрывать какого владельца и путь в этом репозитории. Политика репозитория может сужать политику организации, но не может регистрировать App или ослаблять организационные защитные меры. Политика репозитория представляет собой TOML со schema_version, enabled и delegations, содержащими app, paths, for_owners и required_labels. Значение app — это псевдоним из таблицы apps политики организации, связывающий псевдоним с неизменяемым числовым ID App, публичным slug и bot-user ID. Примеры файлов политик находятся в examples/policy, а руководство по конфигурации охватывает обе области, сопоставление путей, метки, встроенные защищённые файлы и небезопасный аварийный выход. Для локальной проверки чистый checkout можно запустить с помощью Bash, Git и mise, склонировав репозиторий и выполнив mise trust, mise install, mise run bootstrap и mise run test. README советует читать mise.toml перед mise trust, поскольку эта команда фиксирует локальное доверительное решение. Успешный запуск завершается прохождением набора тестов. Он не регистрирует GitHub App и не подтверждает живые контракты GitHub. Для публикации проверки в тестовом репозитории предоставлено первое руководство. Нативные правила кода должны оставаться включёнными там, где это важно. Альфа-образы и диаграммы предназначены только для тестирования в shadow-режиме и должны закрепляться по digest. Проект находится в состоянии pre-release. Альфа-образы и диаграммы предназначены только для необязательного тестирования в shadow-режиме и не должны обеспечивать production-слияния. Устаревшие preview-образы, такие как main и его tags sha и sha256 companion, не поддерживаются и небезопасны для развертывания, поскольку они старше неизменяемого релизного конвейера. Документ состояния проекта отделяет то, что доступно сегодня, от того, что всё ещё блокирует поддерживаемый выпуск. Документация включает состояние проекта, сравнение с нативными CODEOWNERS, модель угроз, руководство по установке для разработчиков, руководство по конфигурации, руководство по устранению неполадок, руководства по развертыванию и эксплуатации, наборы уведомлений получателей, руководства по архитектуре и сопровождающим, а также руководство для участников. Полная документация находится на Read the Docs. Политики проекта охватывают поддержку, отчетность об уязвимостях в приватном порядке, CVE OpenSSL и VEX, управление, журнал изменений и лицензию Apache License 2.0. Набор бейджей указывает CI, property-testing, покрытие, CodeQL, OpenSSF Scorecard, документацию, Python 3.12–3.14 и лицензирование Apache-2.0.