Processo di Rilascio¶
SaniKey usa Semantic Release su GitHub, con lo stesso meccanismo di Fontshow.
Ogni push controllata su main viene analizzata dalla CI: un commit fix crea
una patch, un commit feat una minor e una modifica incompatibile una major.
La CI aggiorna CHANGELOG.md, crea il commit di rilascio, il tag vX.Y.Z e la
release GitHub. Non pubblica pacchetti su PyPI o TestPyPI.
Controlli Locali¶
Prima di inviare main, verificare che il repository sia in uno stato
pubblicabile:
git release-audit
Quel guard controlla:
- contenuti candidati al commit privi di dati sanitari, percorsi privati e credenziali
- albero di lavoro pulito
- area di staging vuota
- branch non arretrato rispetto all'upstream
- ultimo tag di versione antenato di
HEAD - presenza della sezione
UnreleasedinCHANGELOG.md
Versione, changelog e tag¶
I tag di rilascio rispettano vX.Y.Z, ma sono creati soltanto da GitHub
Semantic Release. Non creare tag manuali salvo una riparazione documentata.
Per inviare una modifica pronta al rilascio:
git rel
git rel e' l'unico percorso di push da main: aggiorna il ramo con
fast-forward, esegue l'audit, esegue l'anteprima Semantic Release e invia il
ramo. L'anteprima verifica GitHub e genera le note senza pubblicare: le
credenziali GitHub esistono soltanto nel suo processo figlio SOPS. Attendere il
workflow Release,
quindi eseguire git pull --ff-only && uv sync && uv run sanikey -V; il comando
mostrerĂ la versione esatta del tag creato dalla CI, non una versione di sviluppo
.postN.
L'hook pre-push blocca una git push diretta su main; la sola eccezione
locale di emergenza e' git push --no-verify, da usare soltanto per recupero
operativo documentato. Prima di un rilascio si puo' verificare l'installazione
dei controlli con git release-check.
SaniKey fornisce anche scripts/tag_guard.sh per validare separatamente un tag
proposto.
Workflow GitHub¶
Il workflow .github/workflows/release.yml segue il modello di Fontshow:
checkout completo, Node 22, npm ci e npx semantic-release. Semantic Release
genera changelog, tag e release GitHub. Il progetto non include un percorso
automatico o manuale di pubblicazione PyPI/TestPyPI.