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:
@@ -164,40 +164,67 @@ Document produit (URLs construites vers les assets de la release) :
|
||||
|
||||
---
|
||||
|
||||
## 3. Commit, Push & Tagging Git
|
||||
## 3. Version, Commit & Push
|
||||
|
||||
Une fois les modifications testées et validées :
|
||||
### Source unique de vérité : `VERSION`
|
||||
|
||||
1. **Commit et Push du code source** :
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "feat: préparation release v2.0.0"
|
||||
git push origin main
|
||||
```
|
||||
*Ceci déclenchera la vérification CI standard sur Gitea (lint, tests unitaires, build Docker).*
|
||||
Le fichier **`VERSION`** à la racine du dépôt contient la version livrée au format
|
||||
`MAJEUR.MINEUR.CORRECTIF`. C'est la **seule** source : elle est incrémentée à chaque
|
||||
commit et tout le reste en découle.
|
||||
|
||||
2. **Création du Tag de Version** :
|
||||
```bash
|
||||
git tag -a v2.0.0 -m "Release v2.0.0"
|
||||
git push origin v2.0.0
|
||||
```
|
||||
| Dérivé | Contenu |
|
||||
|---|---|
|
||||
| `backend/version.py` | lit `VERSION` (priorité : `OBSIGATE_VERSION` > `./VERSION` > `backend/VERSION` > tag git) et l'expose via `/api/health` |
|
||||
| `Dockerfile` | `COPY VERSION ./VERSION` — plus aucun numéro codé en dur dans l'image |
|
||||
| `build.sh` / CI | affichent la version lue dans `VERSION` |
|
||||
| `desktop/build.rs` | injecte `VERSION` dans `GIT_VERSION` (repli `git describe`) |
|
||||
| `package.json`, `desktop/tauri.conf.json`, `desktop/Cargo.{toml,lock}`, `README.md`, `README.fr.md`, `docs/ROADMAP.md`, `CHANGELOG.md` | resynchronisés automatiquement à chaque incrément |
|
||||
|
||||
### Bump automatisé (recommandé)
|
||||
### Incrément automatique (hooks git versionnés)
|
||||
|
||||
`scripts/bump_version.sh` calcule la prochaine version depuis les commits
|
||||
(Conventional Commits), **synchronise la version desktop**
|
||||
(`tauri.conf.json`, `Cargo.toml`, `Cargo.lock`), crée un commit de release puis
|
||||
le tag :
|
||||
`scripts/install-hooks.sh` (une seule fois par clone) pose `core.hooksPath=.githooks`
|
||||
et `push.followTags=true`. Ensuite, chaque commit incrémente la version selon son
|
||||
message (Conventional Commits) :
|
||||
|
||||
| Message de commit | Incrément |
|
||||
|---|---|
|
||||
| `!:` ou `BREAKING CHANGE:` | MAJEUR — `x.0.0` |
|
||||
| `feat:` / `feat(scope):` | MINEUR — `x.y.0` |
|
||||
| `fix:`, `perf:`, `docs:`, … | CORRECTIF — `x.y.z` |
|
||||
|
||||
`.githooks/prepare-commit-msg` incrémente `VERSION`, resynchronise les fichiers dérivés
|
||||
et publie la section `[Unreleased]` du CHANGELOG en `[X.Y.Z] — date`. `.githooks/post-commit`
|
||||
rattache ces fichiers au commit qui vient d'être créé (git fige l'arbre avant
|
||||
`prepare-commit-msg` : un `git add` à cet instant ne serait repris qu'au commit suivant —
|
||||
d'où un `--amend` immédiat, le commit n'étant pas encore poussé) puis crée le tag `vX.Y.Z`,
|
||||
publié automatiquement au push (`push.followTags`). Aucun incrément pour un merge, un
|
||||
revert, un `chore(release)` ou un `--amend`.
|
||||
|
||||
Livraison type :
|
||||
|
||||
```bash
|
||||
scripts/bump_version.sh --dry-run # prévisualiser la prochaine version
|
||||
scripts/bump_version.sh # bump + commit + tag (local)
|
||||
scripts/bump_version.sh --push # idem + push branche & tag
|
||||
git add <chemins explicites> # pas de `git add -A` (test_vault = brouillon utilisateur)
|
||||
git commit -m "fix(ai): BUG-047 …" # → VERSION incrémentée + tag vX.Y.Z créé
|
||||
git push origin main # → branche + tag publiés
|
||||
```
|
||||
|
||||
Contournement ponctuel (commit sans incrément) : `SKIP_VERSION_BUMP=1 git commit …`.
|
||||
|
||||
### Bump manuel / outillage
|
||||
|
||||
```bash
|
||||
scripts/bump_version.py --print-version # version courante
|
||||
scripts/bump_version.py --dry-run # prochaine version, sans rien écrire
|
||||
scripts/bump_version.py --minor # incrément forcé + resynchronisation
|
||||
scripts/bump_version.py --set 3.0.0 # version imposée
|
||||
scripts/bump_version.py --major --commit --tag --push
|
||||
scripts/bump_version.sh … # même outil (wrapper historique)
|
||||
```
|
||||
|
||||
> La version desktop doit être synchronisée avec le tag pour que l'updater Tauri
|
||||
> détecte les mises à jour (`latest.json` reprend la version de
|
||||
> `tauri.conf.json`). `--no-files` conserve l'ancien comportement (tag seul).
|
||||
> détecte les mises à jour (`latest.json` reprend la version de `tauri.conf.json`) :
|
||||
> l'incrément automatique s'en charge.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user