
CLI de Python que crea repositorios de GitHub con valores predeterminados seguros: protección de ramas, Dependabot, escaneo de secretos y escaneo de seguridad previo al vuelo, aplicados automáticamente.
Crea repositorios de GitHub con configuraciones seguras predeterminadas aplicadas, con un solo comando.
gh-safe-repo create <owner/repo>
La protección de ramas, las etiquetas inmutables, las Actions restringidas, Dependabot, el escaneo de secretos con protección de push y la notificación privada de vulnerabilidades se configuran antes de que hagas tu primer commit. La misma herramienta audita y corrige repositorios que ya tienes, y escanea el código local en busca de secretos antes de que salga de tu máquina.
Estado: el flujo de trabajo principal es estable y está verificado de extremo a extremo, pero la CLI aún se está puliendo. Es posible que haya cambios disruptivos ocasionales antes de la versión 1.0.
--local y --fromLos valores predeterminados de GitHub favorecen la descubribilidad sobre la seguridad: un repositorio nuevo no tiene protección de ramas, ni Dependabot, y tiene Actions que pueden escribir en el repositorio y aprobar sus propias pull requests. gh-safe-repo cambia eso, y te muestra el plan antes de tocar nada:
--public para hacerlo público.Cada ajuste es configurable. Consulta Valores predeterminados seguros para conocer los valores exactos y Configuración para saber cómo cambiarlos.
Requisitos:
gh con sesión iniciada (gh auth login), o GITHUB_TOKEN definido en el entornouv para instalar desde el código fuentePATH o se ejecuta mediante podman/docker; sin ninguno de los dos, se usa un escáner basado en regex.Subir código con --local o --from también requiere tus credenciales de git habituales para GitHub. Consulta Subir código.
git clone https://github.com/AriESQ/gh-safe-repo
cd gh-safe-repo
uv tool install .
gh-safe-repo --help
Para ejecutar sin instalar:
uv sync
./gh-safe-repo create <owner/repo>
1. Vista previa. --dry-run no realiza llamadas a la API y no crea nada.
$ 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.
Las filas SKIP son lo que parece un repositorio privado en un plan gratuito. Esas
funciones requieren un repositorio público o un plan de pago, y la herramienta lo indica en lugar de
fallar silenciosamente. Consulta Limitaciones del plan de GitHub.
2. Aplicar. Elimina --dry-run. Verás el mismo plan, luego un mensaje
de confirmación (--yes lo omite).
gh-safe-repo create AriESQ/demo-repo
3. Empieza a trabajar. Si todo va bien, obtendrás una sección Verified (cada ajuste releído desde GitHub) y un banner con comandos listos para pegar:
╭─ 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-… │
╰──────────────────────────────────────────────────────────╯
Tu protocolo preferido (gh config get -h github.com git_protocol) aparece
en primer lugar.
gh-safe-repo create <owner/repo> # private (default)
gh-safe-repo create <owner/repo> --public # public: branch and tag protection apply
El repositorio se inicializa para que exista una rama predeterminada (la protección de ramas necesita una), luego se elimina el README.md autogenerado para que empieces limpio. Establece auto_init = true en la configuración para conservarlo. El propietario debe coincidir con tu cuenta autenticada; esto protege contra errores en sistemas con múltiples cuentas.
gh-safe-repo create <owner/repo> --local ~/projects/myapp