Version : 1.0 — Mars 2026 Scope : Packaging desktop Tauri v2 + Python (PyInstaller) → installeur Windows (NSIS) Objectif : Reproduire le pipeline de build et de packaging desktop validé sur EVQuest (Tauri v2 + backend Python + frontend React) — artefacts à embarquer, config NSIS, updater, checklist machine vierge.
Architecture
App desktop Tauri
├── Shell Rust (Tauri) → Compilé en binaire natif
├── Frontend React → Bundlé dans le WebView
├── Backend Python (PyInstaller) → Embarqué dans resources/
│ └── _internal/ → Runtime Python + dépendances
└── Installeur NSIS → Distribué aux utilisateurs
Dépendances embarquées
| Dépendance | Embarquée par | Installation séparée ? |
|---|---|---|
| Python runtime | PyInstaller (api-server.exe + _internal/) |
Non |
| SQLite | Python stdlib sqlite3 |
Non |
| MSVC C++ Runtime | PyInstaller (vcruntime140.dll dans _internal/) |
Non |
| WebView2 | Embarqué dans le binaire Tauri (depuis Tauri v2) | Non |
| Rust runtime | Compilé statiquement dans le binaire Tauri | Non |
Objectif : l'utilisateur n'installe RIEN manuellement.
Pipeline de build
Étapes séquentielles
[1] Version sync check
→ Vérifier que version.json = tous les fichiers de config
→ Abort si mismatch
[2] PyInstaller build
→ Produit src-tauri/resources/api-server/
→ Contient api-server.exe + _internal/ (runtime + deps)
[3] Vérification des artefacts critiques
→ api-server.exe existe
→ sqlite3.dll présent dans _internal/
→ vcruntime140.dll présent dans _internal/
→ Taille du bundle cohérente
[4] Tauri build
→ npm run tauri build
→ Produit l'installeur NSIS dans src-tauri/target/release/bundle/nsis/
[5] Post-build
→ Hash SHA256 de l'installeur
→ Taille finale
→ Prêt pour publication
Vérification post-build
# Artefacts critiques
dir src-tauri\resources\api-server\api-server.exe
dir src-tauri\resources\api-server\_internal\sqlite3.dll
dir src-tauri\resources\api-server\_internal\vcruntime140.dll
# Taille du bundle Python
powershell -Command "(Get-ChildItem -Recurse src-tauri\resources\api-server | Measure-Object -Property Length -Sum).Sum / 1MB"
Configuration NSIS
// tauri.conf.json
{
"bundle": {
"targets": ["nsis"],
"nsis": {
"installMode": "currentUser",
"installerIcon": "icons/icon.ico",
"languages": ["French", "English"]
}
}
}
| Aspect | Choix | Raison |
|---|---|---|
| Mode d'installation | currentUser |
Pas de droits admin/UAC nécessaires |
| Répertoire | %LOCALAPPDATA%\AppName\ |
Standard Windows per-user |
| Données utilisateur | %APPDATA%\AppName\ |
Conservées à la désinstallation |
| WebView2 | Embarqué (Tauri v2) | Plus de bootstrapper externe nécessaire |
Assets NSIS
src-tauri/nsis/
├── header.bmp # 150 × 57 px, 24-bit BMP
└── sidebar.bmp # 164 × 314 px, 24-bit BMP
Checklist machine vierge
Tester l'installeur sur une machine sans outils de dev :
[ ] Pas de Python installé
[ ] Pas de Node.js installé
[ ] Pas de Rust installé
[ ] L'installeur s'exécute sans erreur et sans UAC
[ ] L'app démarre (splash screen → interface)
[ ] Le backend Python répond (pas d'erreur DLL manquante)
[ ] Les fonctionnalités core marchent (import, affichage, etc.)
[ ] La désinstallation fonctionne proprement
Distribution dual-repo
| Repo | Visibilité | Contenu |
|---|---|---|
| Repo principal | Privé | Code source, développement |
| Repo releases | Public | Binaires, CHANGELOG user-facing, update.json (Tauri updater) |
# Créer le repo releases
gh repo create appname-releases --public
# Publier une release
gh release create v0.8.4 \
--repo owner/appname-releases \
--title "AppName v0.8.4" \
"src-tauri\target\release\bundle\nsis\AppName_0.8.4_x64-setup.exe"
Mise à jour automatique (Tauri Updater)
// update.json sur le repo releases
{
"version": "0.8.5",
"notes": "Corrections et améliorations",
"pub_date": "2026-03-20T00:00:00Z",
"platforms": {
"windows-x86_64": {
"signature": "<SIGNATURE>",
"url": "https://github.com/owner/releases/download/v0.8.5/AppName_0.8.5_x64-setup.nsis.zip"
}
}
}
Setup requis (une seule fois) :
- Générer keypair Tauri :
npx tauri signer generate -w ~/.tauri/appname.key - Plugin Rust :
cargo add tauri-plugin-updater@2 - Package npm :
npm install @tauri-apps/plugin-updater - Variable d'env au build :
TAURI_SIGNING_PRIVATE_KEY=<clé_privée>
Signature de code Windows (futur)
| Option | Coût/an | Effet |
|---|---|---|
| Standard (Sectigo, DigiCert) | ~200-400 EUR | Élimine le warning SmartScreen après quelques downloads |
| EV (Extended Validation) | ~400-700 EUR | Trust immédiat SmartScreen, nécessite token USB |
Dernière mise à jour : mars 2026