fix(version): BUG-047 la version suit chaque livraison (source unique VERSION + bump SemVer automatique)
VERSION (racine) devient la source unique de verite MAJEUR.MINEUR.CORRECTIF, incrementee a chaque commit par le hook prepare-commit-msg (BREAKING -> majeur, feat -> mineur, sinon correctif) ; post-commit rattache les fichiers derives au commit et cree le tag vX.Y.Z, publie au push (push.followTags). Tous les derives sont resynchronises : package.json, desktop Tauri, README.md/README.fr.md, docs/ROADMAP.md, CHANGELOG.md. Backend, image Docker et desktop lisent le meme fichier (plus de numero code en dur). Outils : scripts/bump_version.py, scripts/install-hooks.sh. Tests : tests/test_version.py (46, garde-fou de coherence globale).
This commit is contained in:
@@ -17,8 +17,9 @@ la checklist du §5 n'est pas entièrement verte, **CI compris**.
|
||||
|
||||
| Fichier | Rôle | Quand le mettre à jour |
|
||||
|---|---|---|
|
||||
| [`VERSION`](../VERSION) (racine) | **Version livrée** — source unique de vérité (SemVer `MAJEUR.MINEUR.CORRECTIF`) | Automatiquement à chaque commit (hook `.githooks/prepare-commit-msg`) |
|
||||
| [`docs/ROADMAP.md`](./ROADMAP.md) | Travail **à venir** (🔵 En cours + ⚪ Backlog) + index du complété | Au début (statut) et à la fin (index) |
|
||||
| [`CHANGELOG.md`](../CHANGELOG.md) | Historique officiel par version (Keep a Changelog) | À chaque livraison, dans `[Unreleased]` |
|
||||
| [`CHANGELOG.md`](../CHANGELOG.md) | Historique officiel par version (Keep a Changelog) | À chaque livraison : écrire dans `[Unreleased]` (publié en `[X.Y.Z] — date` par le bump) |
|
||||
| [`docs/features/<slug>.md`](./features/) | **Conception / spec détaillée** d'une grosse feature | Quand l'item est livré |
|
||||
| [`docs/archive/COMPLETED_v1-v2.md`](./archive/COMPLETED_v1-v2.md) | Détail des items courts livrés | Quand l'item est livré |
|
||||
| [`docs/ISSUES_TODOLIST.md`](./ISSUES_TODOLIST.md) | Registre des **bugs / TODO** | À chaque bug (statut + correctif/commit) |
|
||||
@@ -52,8 +53,11 @@ la checklist du §5 n'est pas entièrement verte, **CI compris**.
|
||||
4. **Vérifier en local** — exécuter les commandes du §6.
|
||||
5. **Documenter** — CHANGELOG `[Unreleased]`, Roadmap / ISSUES, fiche feature ou archive, guide
|
||||
utilisateur + i18n FR/EN, README si besoin, OpenAPI si API.
|
||||
6. **Commit** — message conventionnel (`feat:`, `fix:`…) référençant `#NN` / `BUG-NNN`.
|
||||
7. **Push** puis **vérifier le CI vert** (jobs `lint`, `test`, `security`, `build`, `e2e`).
|
||||
6. **Commit** — message conventionnel (`feat:`, `fix:`…) référençant `#NN` / `BUG-NNN` : le
|
||||
préfixe détermine l'incrément SemVer de `VERSION` (MAJEUR / MINEUR / CORRECTIF), appliqué
|
||||
automatiquement par le hook `.githooks/prepare-commit-msg`.
|
||||
7. **Push** puis **vérifier le CI vert** (jobs `lint`, `test`, `security`, `build`, `e2e`) ; le
|
||||
tag `vX.Y.Z` de la version livrée est publié avec la branche (`push.followTags`).
|
||||
8. **Clôturer** — statut `🟢 corrigé` / index `✅` posé par l'IA ; l'utilisateur valide (`✅ vérifié`).
|
||||
|
||||
---
|
||||
@@ -74,6 +78,7 @@ la checklist du §5 n'est pas entièrement verte, **CI compris**.
|
||||
- [ ] E2E Playwright si flow UI critique touché
|
||||
|
||||
### Documentation
|
||||
- [ ] `VERSION` incrémenté et dérivés synchronisés (automatique via le hook ; `tests/test_version.py` vert)
|
||||
- [ ] `CHANGELOG.md` → `[Unreleased]` (section Ajouté / Modifié / Corrigé)
|
||||
- [ ] `docs/ROADMAP.md` → statut mis à jour + ligne dans l'index « Complété »
|
||||
- [ ] Fiche `docs/features/<slug>.md` **ou** `docs/archive/` si l'item est livré
|
||||
@@ -113,9 +118,22 @@ npx playwright test
|
||||
|
||||
## 7. Versionnement & release
|
||||
|
||||
- **SemVer** `MAJOR.MINOR.PATCH` ; tags Git `vX.Y.Z` ; source de vérité = `CHANGELOG.md`.
|
||||
- Lors d'une publication : déplacer `[Unreleased]` vers `[X.Y.Z] — date`, tagger, builder et
|
||||
publier (procédure détaillée dans [DEVELOPMENT_AND_RELEASES.md](./DEVELOPMENT_AND_RELEASES.md)).
|
||||
- **Source unique de vérité : le fichier [`VERSION`](../VERSION)** (racine du dépôt), au format
|
||||
`MAJEUR.MINEUR.CORRECTIF` (SemVer). Il est incrémenté **automatiquement à chaque commit** par
|
||||
le hook versionné `.githooks/prepare-commit-msg` — `!:` / `BREAKING CHANGE` → **MAJEUR**, `feat` →
|
||||
**MINEUR**, tout le reste → **CORRECTIF** — puis tagué `vX.Y.Z` par `.githooks/post-commit`
|
||||
(tag publié au push grâce à `push.followTags`). Installation une fois par clone :
|
||||
`scripts/install-hooks.sh`.
|
||||
- Le même commit resynchronise les dérivés : `package.json`, desktop Tauri (`tauri.conf.json`,
|
||||
`Cargo.toml`, `Cargo.lock`), `README.md`/`README.fr.md`, `docs/ROADMAP.md`, et publie la
|
||||
section `[Unreleased]` du `CHANGELOG.md` en `[X.Y.Z] — date`.
|
||||
- Le backend (`backend/version.py`), l'image Docker (`COPY VERSION`) et le desktop Tauri lisent
|
||||
ce fichier : la version affichée par l'UI (`/api/health` → header, boîte À propos) suit donc
|
||||
chaque livraison.
|
||||
- **Garde-fou** : `tests/test_version.py::TestRepoVersionAlignment` échoue dès qu'un dérivé
|
||||
diverge de `VERSION` (numéro codé en dur, CHANGELOG sans section, README non resynchronisé).
|
||||
- Bump manuel si besoin : `scripts/bump_version.py --dry-run|--minor|--set X.Y.Z|--push`.
|
||||
Commit sans incrément (cas exceptionnel) : `SKIP_VERSION_BUMP=1 git commit …`.
|
||||
- **Ne jamais** réécrire une version déjà publiée dans le CHANGELOG.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user