Retour à la Knowledge Base
Breakthrough

version-sync-multi-stack

Mars 2026·Projet : EVQuest (Python + Node + Rust + Tauri)
PythonNode.jsRustTauri

Vécu projet : EVQuest (Python + Node + Rust + Tauri) Date : Mars 2026 Stack : Python, Node.js, Rust, Tauri v2


Contexte

EVQuest combine 5 stacks (Python, Node.js, Rust, React, Tauri) avec chacune son fichier de version.

Problème

Un projet multi-stack a la version déclarée dans 5-6 fichiers différents. Sans source unique, les versions dérivent et le build produit des artefacts incohérents.

Solution

{ "version": "0.8.4" }

Fichiers synchronisés par un script bump_version.py

Fichier Champ Stack
version.json version Source unique
package.json (racine) version Node/npm
frontend/package.json version Frontend React
pyproject.toml [project].version Python
src-tauri/tauri.conf.json version Tauri/NSIS
src-tauri/Cargo.toml [package].version Rust

Script de bump

# Définir une version spécifique
python scripts/bump_version.py --set 0.8.4

# Incrémenter
python scripts/bump_version.py --patch      # 0.8.4 → 0.8.5
python scripts/bump_version.py --minor      # 0.8.4 → 0.9.0

# Vérifier la synchronisation (sans modifier)
python scripts/bump_version.py --check

Vérification runtime

# Le backend expose la version via un health check
curl http://127.0.0.1:8742/api/v1/health
# → {"status": "ok", "version": "0.8.4"}

Intégration dans le workflow de release

# 1. Bump
python scripts/bump_version.py --set 0.8.5

# 2. Commit tous les fichiers modifiés
git add version.json package.json frontend/package.json \
       pyproject.toml src-tauri/tauri.conf.json src-tauri/Cargo.toml
git commit -m "chore: bump version to 0.8.5"

# 3. Build (le script vérifie la sync en étape 0)
scripts/build_release.bat

# 4. Tag + push
git tag v0.8.5
git push && git push --tags

Points d'attention

  • Le script bump_version.py doit être le seul moyen de changer la version. Jamais d'édition manuelle des fichiers individuels.
  • L'étape 0 du build pipeline (--check) doit abort si les versions ne sont pas synchronisées.
  • Le health endpoint du backend doit retourner la version pour vérification post-déploiement.

Pourquoi

version.json comme source unique plutôt que package.json car le projet combine 5 stacks différentes avec chacune son fichier de version. Un script Python unique (bump_version.py) synchronise tous les fichiers — c'est le seul moyen de changer la version. L'alternative (édition manuelle de 6 fichiers) garantit le drift.

Ce pattern s'applique à tout projet combinant plusieurs stacks (Tauri, Electron, monorepos). Pour les projets single-stack (Next.js seul par exemple), un simple package.json suffit.

Dernière mise à jour : mars 2026