Проверяет файл CODEOWNERS по дереву репозитория до того, как он сломает ревью: неверные владельцы, правила, которые ничего не покрывают, дубликаты и файлы без владельца. Работает офлайн и только читает файлы. Без зависимостей, Python 3.10+.
python -m codeowners_lint # текущая папка
python -m codeowners_lint . --require-full --strict
python -m codeowners_lint . --json
python -m codeowners_lint . --require-full --exclude "gen/*" # сгенерированные файлы без владельца допустимыПример вывода для examples/demo:
CODEOWNERS: CODEOWNERS (3 rules)
OK: no findings
| Код | Уровень | Смысл |
|---|---|---|
INVALID_OWNER |
error | владелец не @user, @org/team и не e-mail |
NO_OWNERS |
error | правило без владельцев |
NO_CODEOWNERS |
info (error с --require-file) |
файла нет в CODEOWNERS, .github/ или docs/ |
UNMATCHED_PATTERN |
warning | шаблон не совпадает ни с одним файлом |
DUPLICATE_PATTERN |
warning | шаблон повторяется; действует последний |
UNOWNED_FILES |
error с --require-full |
файлы без владельца |
Коды возврата: 0 — ок, 1 — есть ошибки (или предупреждения при --strict), 2 — путь не папка.
- Последнее совпавшее правило побеждает, как в GitHub.
- Шаблон без
/совпадает с файлом в любой папке;/docs/— только в корне;**— любая вложенность. - Папки
.git,node_modules,.venv,venv,__pycache__пропускаются.
- Не проверяет, существуют ли команды и пользователи в GitHub: проверка офлайн.
- Сопоставление шаблонов упрощённое; сложные случаи
[abc]и экранирование не поддерживаются.
python -m unittest discover -s tests -t .MIT — см. LICENSE.
См. CHANGELOG.md. Политика безопасности — в SECURITY.md.
Фрагмент для GitHub Actions (Python 3.10+, без зависимостей):
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: codeowners-lint
run: python -m codeowners_lint . --require-full --strict