
CLI Python che crea repository GitHub con impostazioni sicure predefinite — protezione dei branch, Dependabot, scansione dei segreti e scansione di sicurezza pre-flight — applicate automaticamente.
Crea repository GitHub con impostazioni sicure predefinite applicate automaticamente. Sostituisce la checklist di cinque minuti per le impostazioni post-creazione con un singolo comando.``` gh-safe-repo create <owner/repo>
La protezione dei branch, i tag immutabili, Dependabot, le autorizzazioni Actions limitate e la scansione dei segreti con push protection — tutto configurato prima ancora di scrivere la prima riga di codice.
> **Stato:** gh-safe-repo è in fase di sviluppo intenso. Funziona bene per il caso d'uso principale — creare un nuovo repo con impostazioni sicure predefinite — ma le opzioni della CLI sono ancora in fase di rifinitura per allinearsi meglio alle aspettative degli utenti. Aspettati modifiche incompatibili finché release e CI/CD non saranno consolidati. ✌️
---
## Cosa ottieni
Le impostazioni predefinite di GitHub sono ottimizzate per la scopribilità e la flessibilità, non per la sicurezza: ogni nuovo repo viene creato senza protezione dei branch, senza Dependabot e con Actions che hanno accesso in scrittura al repo e possono approvare le proprie pull request.
`gh-safe-repo` risolve tutto questo in un colpo solo, mostrandoti prima un piano:
- **Privato per impostazione predefinita** — passa `--public` quando vuoi che il mondo lo veda
- **Protezione dei branch** — PR obbligatoria, 1 revisione approvante, revisioni obsolete scartate, conversazioni risolte, nessun force push, nessuna cancellazione di branch
- **Tag immutabili** — i tag di release non possono essere riscritti o eliminati
- **Actions bloccate** — token in sola lettura, nessuna PR auto-approvata, azioni con SHA bloccato, solo publisher di proprietà GitHub e verificati
- **Dependabot attivo** — avvisi di vulnerabilità più PR di correzione automatiche
- **Scansione dei segreti con push protection** — i commit contenenti segreti supportati vengono bloccati
- **Segnalazione privata di vulnerabilità** — i ricercatori possono contattarti senza rendere pubblico il problema
- **Scansione preventiva dei segreti** — quando si esegue il push di codice esistente (`--local` / `--from`), il working tree e la cronologia git vengono scansionati localmente prima che qualsiasi cosa raggiunga GitHub
- **Extra opzionali** — wiki, progetti e issue vengono lasciati invariati a meno che tu non ne richieda la gestione (`has_wiki = false` nella configurazione)
Tutto è configurabile. Vedi [Impostazioni sicure predefinite complete](#safe-defaults-in-full) per le impostazioni esatte e [Configurazione](#configuration) per come modificarle.
## Requisiti
- **Python 3.10+**
- **[`gh` CLI](https://cli.github.com/)** autenticata (`gh auth login`), **oppure** `GITHUB_TOKEN` impostato nel tuo ambiente
- **[`uv`](https://docs.astral.sh/uv/)** per l'installazione dal sorgente
- **truffleHog v3** *(opzionale)* — utilizzato dallo scanner preventivo; rilevato automaticamente dal PATH o eseguito tramite podman/docker, con un fallback regex se nessuno dei due esiste
Il push del codice con `--local` o `--from` richiede inoltre le tue normali credenziali git per GitHub — vedi [Lavorare da codice locale o esistente](#working-from-local-or-existing-code).
## Installazione```bash
git clone https://github.com/AriESQ/gh-safe-repo
cd gh-safe-repo
uv tool install .
gh-safe-repo --help
Questo installa gh-safe-repo nell'ambiente degli strumenti di uv e lo aggiunge al tuo PATH.
Per eseguirlo senza installarlo:```bash uv sync # creates .venv ./gh-safe-repo create <owner/repo>
## Il tuo primo repository
**1. Anteprima.** `--dry-run` non effettua alcuna chiamata API — non viene creato nulla:```
$ 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.
Le righe SKIP sopra sono un repo privato con piano gratuito: quelle funzionalità richiedono un repo pubblico o un piano a pagamento. Nulla fallisce silenziosamente — vedi Limitazioni del piano GitHub.
2. Apply. Stesso comando senza --dry-run. Ottieni lo stesso piano, poi un prompt di conferma (--yes lo salta):```bash
gh-safe-repo create AriESQ/demo-repo
**3. Inizia a lavorare.** In caso di successo ottieni l'URL del repository e i comandi remoti pronti da incollare:```
╭─ 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-… │
╰──────────────────────────────────────────────────────────╯
I remote sono elencati con il tuo protocollo preferito per primo (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
Un semplice `create` inizializza il repository in modo che esista un branch predefinito (la protezione del branch ne ha bisogno), poi elimina il `README.md` generato automaticamente così inizi da zero. Imposta `auto_init = true` nella configurazione per conservarlo.
### Eseguire il push di un progetto locale esistente```bash
gh-safe-repo create <owner/repo> --local ~/projects/myapp
Analizza prima la directory alla ricerca di segreti, crea il repository, esegue il push di tutti i branch e tag, quindi configura origin e il tracking upstream nella directory originale in modo che git push funzioni immediatamente. Un origin esistente che punta altrove viene lasciato invariato; un avviso e il banner di successo ti indicano l'esatto git push -u origin <branch>:<branch> da eseguire invece. Vedi Working from local or existing code.