
Python CLI, который автоматически создаёт репозитории GitHub с безопасными настройками по умолчанию — защита веток, Dependabot, сканирование секретов и предварительное сканирование безопасности.
Создавайте репозитории GitHub с безопасными настройками по умолчанию одной командой.
gh-safe-repo create <owner/repo>
Защита веток, неизменяемые теги, ограниченный доступ для Actions, Dependabot, сканирование секретов с защитой от отправки и приватное сообщение об уязвимостях — всё это настраивается до того, как вы отправите первый коммит. Тот же инструмент проверяет и исправляет уже существующие репозитории, а также сканирует локальный код на наличие секретов до того, как он покинет вашу машину.
Статус: основной рабочий процесс стабилен и проверен от начала до конца, но CLI всё ещё дорабатывается. До версии 1.0 возможны периодические критические изменения.
--local и --fromНастройки GitHub по умолчанию отдают приоритет обнаруживаемости, а не безопасности: у нового репозитория нет
защиты веток, нет Dependabot, а Actions могут писать в репозиторий и
одобрять собственные пул-реквесты. gh-safe-repo меняет это и показывает вам
план до того, как что-либо изменит:
--public, чтобы сделать его публичным.Каждая настройка конфигурируема. Точные значения см. в разделе Безопасные значения по умолчанию, а способы их изменения — в разделе Конфигурация.
Требования:
gh CLI с выполненным входом (gh auth login) или
GITHUB_TOKEN, заданный в окруженииuv для установки из исходниковPATH
или запускается через podman/docker; без того и другого используется сканер на регулярных выражениях.Для отправки кода с --local или --from также нужны ваши обычные git-учётные данные
для GitHub. См. Отправка кода.
git clone https://github.com/AriESQ/gh-safe-repo
cd gh-safe-repo
uv tool install .
gh-safe-repo --help
Для запуска без установки:
uv sync
./gh-safe-repo create <owner/repo>
1. Предварительный просмотр. --dry-run не выполняет вызовов API и ничего не создаёт.
$ gh-safe-repo create AriESQ/demo-repo --dry-run
Configuring AriESQ/demo-repo...
Planned Changes
Type Category Setting Value / Note
------ ----------------- -------------------------------------- ----------------------------------------------------------------
ADD repo repository AriESQ/demo-repo
DELETE file readme README.md
UPDATE actions allowed_actions 'all' → 'selected'
UPDATE actions verified_allowed False → True
UPDATE actions sha_pinning_required False → True
UPDATE actions default_workflow_permissions 'write' → 'read'
UPDATE actions can_approve_pull_request_reviews True → False
SKIP branch_protection branch_protection Branch protection requires a public repo or paid GitHub plan
SKIP security dependabot_alerts Requires a public repo or paid GitHub plan
SKIP security secret_scanning Requires a public repo or paid GitHub plan
SKIP security dependabot_security_updates Requires a public repo or paid GitHub plan
SKIP security private_vulnerability_reporting Requires a public repo or paid GitHub plan
SKIP security enable_dependency_graph Requires a public repo or paid GitHub plan
SKIP security enable_secret_scanning_push_protection Requires a public repo or paid GitHub plan
SKIP tag_protection tag_protection Tag protection rulesets require a public repo or paid GitHub plan
7 change(s) to apply, 8 skipped
Dry run — no changes made.
Строки SKIP — это то, как выглядит приватный репозиторий на бесплатном плане. Эти функции требуют публичного репозитория или платного плана, и инструмент сообщает об этом, а не завершается молча с ошибкой. См. Ограничения планов GitHub.
2. Применение. Уберите --dry-run. Вы увидите тот же план, затем запрос на подтверждение (--yes пропускает его).
gh-safe-repo create AriESQ/demo-repo
3. Начните работу. При успехе вы получите раздел Verified (каждый параметр, считанный обратно с GitHub) и баннер с готовыми к вставке командами:
╭─ Done ───────────────────────────────────────────────────╮
│ Repository created successfully! │
│ https://github.com/AriESQ/demo-repo │
│ │
│ Add remote to existing repo: │
│ SSH : git remote add origin [email protected]:AriESQ/… │
│ HTTPS: git remote add origin https://github.com/… │
│ │
│ Clone fresh: │
│ SSH : git clone [email protected]:AriESQ/demo-repo.git │
│ HTTPS: git clone https://github.com/AriESQ/demo-… │
╰──────────────────────────────────────────────────────────╯
Предпочитаемый вами протокол (gh config get -h github.com git_protocol) указан первым.
gh-safe-repo create <owner/repo> # private (default)
gh-safe-repo create <owner/repo> --public # public: branch and tag protection apply
Репозиторий инициализируется, чтобы существовала ветка по умолчанию (она нужна для защиты ветки), затем автоматически сгенерированный README.md удаляется, чтобы вы начали с чистого листа. Установите auto_init = true в конфигурации, чтобы сохранить его. Владелец должен совпадать с вашей аутентифицированной учётной записью; это защищает от ошибок в системах с несколькими учётными записями.
gh-safe-repo create <owner/repo> --local ~/projects/myapp