Merci. Le périmètre du MVP est volontairement étroit : un binaire, un YAML, un verdict. Les PRs qui restent dans ce cadre passent plus vite.
Go 1.27 ou plus récent (voir go.mod). Docker n'est pas requis pour
lancer la suite de tests : le contrôle docker s'appuie sur un Runner
injecté.
go vet ./...
go test ./...
go build -o envcheck ./cmd/envcheckSur une pull request, la CI exécute les tests sur Linux, macOS et Windows,
puis GoReleaser en snapshot. Un job sans setup-go extrait l'archive
Linux amd64, vérifie checksums.txt, et lance le binaire (--version,
init --dry-run).
main est protégé : on n'y pousse pas. Tout passe par une pull request.
- Branche depuis
mainà jour (release/vX.Y.Zoudocs/…). - Rédigez la section
## [X.Y.Z]dansCHANGELOG.mdpour un humain : ce qui change pour l'utilisateur, pas la liste des commits. Laissez## [Unreleased]vide au-dessus. - Ouvrez une PR vers
main. La CI (tests + snapshot GoReleaser) doit passer. - Après le merge, depuis
mainà jour, poussez uniquement le tag :
git checkout main
git pull origin main
git tag -a v0.1.0 -m "v0.1.0"
git push origin v0.1.0.github/workflows/release.yml se déclenche sur v*. Il extrait la
section CHANGELOG correspondant au tag (scripts/extract-release-notes.sh)
et la passe à GoReleaser : c'est ce texte qui apparaît dans « What's Changed »,
pas le journal git. S'il n'y a pas de section pour cette version, la release
échoue.
GoReleaser injecte la version via -X main.version=…, publie les archives
et checksums.txt. Ne jamais forcer un tag déjà poussé.
Pour corriger les notes d'une release déjà publiée (sans retaguer) :
bash scripts/extract-release-notes.sh v0.1.0 notes.md
gh release edit v0.1.0 --notes-file notes.mdLe contrat utilisateur (CLI, YAML, codes de sortie, rapport JSON) est décrit
dans docs/. Un changement de comportement observable doit
y être reflété, pas seulement dans le code.
- La logique métier vit sous
internal/.cmd/envcheckne fait qu'injecter la version et appelerapp.Execute. - Les Checkers ne parlent pas au terminal. Ils reçoivent un
Runtime(env, FS, Runner) pour rester testables sans la machine hôte. os/exec: exécutable et arguments séparés, jamais de shell.- Aucune valeur de variable d'environnement dans un rapport, un test ou une issue. Utilisez des fixtures fictives.
Utilisez le modèle GitHub. Retirez tokens, mots de passe et extraits .env
avant de coller une config ou une sortie JSON.