feat(desktop): signature updater Tauri + wizard persistant + protocole E2E (#77)
CI / lint (push) Successful in 1m11s
CI / security (push) Successful in 43s
CI / test (push) Successful in 2m22s
CI / build (push) Successful in 1m41s
CI / e2e (push) Successful in 10m50s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
CI / lint (push) Successful in 1m11s
CI / security (push) Successful in 43s
CI / test (push) Successful in 2m22s
CI / build (push) Successful in 1m41s
CI / e2e (push) Successful in 10m50s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- Signature des mises a jour Tauri : paire de cles minisign generee, cle publique dans tauri.conf.json, createUpdaterArtifacts actif, secrets CI exposes (repli build non signe si secret absent). - Wizard 1er lancement : etat persistant wizard_done cote Rust (get_wizard_state/complete_wizard) pour ne plus reafficher la banniere, retro-compatible. - Protocole des 6 tests E2E manuels : docs/DESKTOP_E2E_CHECKLIST.md. - CI : desktop.test.mjs ajoute au job lint. - Docs : ROADMAP, fiche desktop-tauri, CHANGELOG, README desktop, guide releases. - fix(build): retirer les libs WeasyPrint inutiles du stage builder Docker.
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
# ObsiGate Desktop — Protocole de tests E2E manuels
|
||||
|
||||
> **Rôle :** valider les 6 scénarios de bout en bout du desktop Tauri (#77) qui ne
|
||||
> peuvent pas être automatisés (interactions OS : installeur, tray, notifications,
|
||||
> association de fichiers, auto-update, désinstallation).
|
||||
> **Statut :** protocole documenté — à exécuter manuellement par un humain.
|
||||
> **Références :** [feature desktop-tauri](./features/desktop-tauri.md) ·
|
||||
> [Roadmap](./ROADMAP.md) · [Build & releases](./DEVELOPMENT_AND_RELEASES.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. Prérequis
|
||||
|
||||
- Un **build release** de l'application :
|
||||
- Windows : `desktop\build-windows.bat` → `ObsiGate_x.y.z_x64.msi` / `-setup.exe`
|
||||
- Linux : `desktop/build-linux.sh` → `obsigate_x.y.z_amd64.deb` / `.AppImage`
|
||||
- Une **machine vierge ou un compte utilisateur propre** (pas d'installation
|
||||
précédente) pour les tests d'installation/désinstallation.
|
||||
- Le **mot de passe admin** affiché au premier lancement (ou `OBSIGATE_ADMIN_PASSWORD`
|
||||
défini avant le lancement).
|
||||
- Accès en écriture aux logs : `%APPDATA%\ObsiGate\logs\backend.log` (Windows) ou
|
||||
`~/.config/obsigate/logs/backend.log` (Linux).
|
||||
|
||||
## 2. Comment remplir ce protocole
|
||||
|
||||
Pour chaque test : noter la **version testée** (`menu Aide → À propos`), le
|
||||
**commit** du build, la **date**, puis cocher `✅ OK` ou `❌ Échec` et joindre les
|
||||
logs/ captures en cas d'échec. Ne cocher un test qu'après avoir observé le
|
||||
**résultat attendu**.
|
||||
|
||||
| Test | Version | Commit | Date | Résultat |
|
||||
|---|---|---|---|---|
|
||||
| T1 — Installation | | | | ⬜ |
|
||||
| T2 — Tray icon | | | | ⬜ |
|
||||
| T3 — Notifications natives | | | | ⬜ |
|
||||
| T4 — Association `.md` | | | | ⬜ |
|
||||
| T5 — Auto-update | | | | ⬜ |
|
||||
| T6 — Désinstallation | | | | ⬜ |
|
||||
|
||||
---
|
||||
|
||||
## T1 — Installation → premier lancement → ouverture d'un fichier
|
||||
|
||||
**Objectif :** l'installeur installe l'app et le premier lancement démarre le
|
||||
backend + affiche l'interface.
|
||||
|
||||
1. Lancer l'installeur (`.msi` ou `.deb`/`.AppImage`).
|
||||
2. Installer dans le chemin par défaut → vérifier la création du raccourci
|
||||
(bureau / menu Démarrer / menu applications).
|
||||
3. Lancer ObsiGate depuis le raccourci.
|
||||
4. Observer l'écran de démarrage (« ObsiGate démarre… ») puis l'interface.
|
||||
5. Au premier lancement, cliquer **« Choisir mon dossier »** dans la bannière du
|
||||
wizard et sélectionner un dossier vault.
|
||||
6. Ouvrir un fichier `.md` depuis l'arborescence.
|
||||
|
||||
**Résultat attendu :**
|
||||
- Aucun terminal / console visible.
|
||||
- Le backend répond (`http://127.0.0.1:17890/api/health` → 200) en ~2 s.
|
||||
- Le fichier s'ouvre dans le viewer.
|
||||
- La bannière du wizard **ne réapparaît pas** au lancement suivant.
|
||||
|
||||
**Échec si :** écran blanc, backend non démarré, wizard qui revient à chaque
|
||||
lancement.
|
||||
|
||||
---
|
||||
|
||||
## T2 — Tray icon → réduire → restaurer
|
||||
|
||||
**Objectif :** le tray fonctionne et contrôle la fenêtre.
|
||||
|
||||
1. Vérifier la présence de l'icône ObsiGate dans la zone de notification.
|
||||
2. Clic **gauche** sur l'icône → la fenêtre se cache.
|
||||
3. Clic **gauche** à nouveau → la fenêtre réapparaît et prend le focus.
|
||||
4. Clic **droit** → menu (Ouvrir ObsiGate / À propos / Quitter).
|
||||
5. Fermer la fenêtre avec le **X** → elle se réduit dans le tray, le backend
|
||||
continue de tourner (l'icône reste).
|
||||
|
||||
**Résultat attendu :** toggle visible/caché immédiat, menu contextuel complet,
|
||||
fermeture par X = réduction (pas d'arrêt du backend).
|
||||
|
||||
---
|
||||
|
||||
## T3 — Notifications natives (fichier modifié → popup OS)
|
||||
|
||||
**Objectif :** les notifications natives remplacent le push web.
|
||||
|
||||
1. Activer les notifications dans les préférences (par vault si proposé).
|
||||
2. Modifier un fichier surveillé (édition externe dans le vault, ou édition
|
||||
in-app avec le watcher actif).
|
||||
3. Observer la notification du système d'exploitation.
|
||||
|
||||
**Résultat attendu :** popup OS affichant le nom du fichier/vault et l'action ;
|
||||
un clic ouvre le fichier concerné. La notification apparaît même si la fenêtre
|
||||
ObsiGate est réduite.
|
||||
|
||||
> Note : sur Windows, vérifier que les notifications ne sont pas bloquées dans
|
||||
> *Paramètres → Système → Notifications*.
|
||||
|
||||
---
|
||||
|
||||
## T4 — Association `.md` → double-clic → ouvre dans ObsiGate
|
||||
|
||||
**Objectif :** l'association de fichiers ouvre l'app.
|
||||
|
||||
1. Vérifier que `.md` est associé à « ObsiGate Markdown » (Windows :
|
||||
*Paramètres → Applications par défaut* ; Linux : `xdg-mime query default text/markdown`).
|
||||
2. **Fermer** complètement ObsiGate (tray → Quitter).
|
||||
3. Double-cliquer sur un fichier `.md` dans l'explorateur / gestionnaire de fichiers.
|
||||
4. Observer le lancement d'ObsiGate et l'ouverture du fichier.
|
||||
|
||||
**Résultat attendu :** ObsiGate démarre et ouvre le fichier (ou le vault
|
||||
contenant le fichier). Un second double-clic alors que l'app tourne **focus la
|
||||
fenêtre existante** (single-instance) au lieu de lancer un doublon.
|
||||
|
||||
---
|
||||
|
||||
## T5 — Auto-update → nouvelle version → installation
|
||||
|
||||
**Objectif :** l'updater détecte et installe une nouvelle version.
|
||||
|
||||
1. S'assurer qu'une **release plus récente** existe sur Gitea (avec les artefacts
|
||||
et le manifeste de mise à jour signé).
|
||||
2. Lancer la version N.
|
||||
3. Déclencher la vérification de mise à jour (menu ou au démarrage selon l'UI).
|
||||
4. Accepter la mise à jour → l'app télécharge, vérifie la signature et installe.
|
||||
5. Relancer → vérifier la version affichée (`À propos`).
|
||||
|
||||
**Résultat attendu :** détection de la version N+1, téléchargement, installation
|
||||
sans intervention manuelle, version mise à jour après redémarrage.
|
||||
|
||||
**Prérequis bloquant :** la `pubkey` de l'updater dans `desktop/tauri.conf.json`
|
||||
ne doit **pas** être le placeholder `OBSIGATE_UPDATE_PUBKEY_PLACEHOLDER`, et la
|
||||
clé privée correspondante doit être fournie au build
|
||||
(`TAURI_SIGNING_PRIVATE_KEY`). Voir §4.
|
||||
|
||||
---
|
||||
|
||||
## T6 — Désinstallation propre
|
||||
|
||||
**Objectif :** la désinstallation ne laisse aucun processus ni résidu gênant.
|
||||
|
||||
1. Fermer ObsiGate (tray → Quitter) pour éviter un processus orphelin.
|
||||
2. Désinstaller via le panneau de configuration (Windows) ou `dpkg -r obsigate`
|
||||
/ supprimer l'AppImage (Linux).
|
||||
3. Vérifier qu'aucun processus `obsigate-desktop` / Python backend ne tourne
|
||||
encore.
|
||||
4. Vérifier les résidus : raccourcis supprimés, entrée « Applications par
|
||||
défaut » retirée.
|
||||
5. (Optionnel) Vérifier le comportement des données utilisateur
|
||||
(`%APPDATA%\ObsiGate` / `~/.config/obsigate`) : conservées ou supprimées selon
|
||||
le choix documenté.
|
||||
|
||||
**Résultat attendu :** désinstallation sans erreur, aucun processus résiduel,
|
||||
aucun raccourci cassé.
|
||||
|
||||
---
|
||||
|
||||
## 3. Emplacements utiles
|
||||
|
||||
| Élément | Windows | Linux |
|
||||
|---|---|---|
|
||||
| Config | `%APPDATA%\ObsiGate\config.json` | `~/.config/obsigate/config.json` |
|
||||
| Logs backend | `%APPDATA%\ObsiGate\logs\backend.log` | `~/.config/obsigate/logs/backend.log` |
|
||||
| Données (index, comptes) | `%APPDATA%\ObsiGate\data\` | `~/.config/obsigate/data\` |
|
||||
|
||||
## 4. Signature de code & auto-update
|
||||
|
||||
- **Signature Windows (optionnelle, hors périmètre de ce protocole) :** sans
|
||||
certificat, SmartScreen affiche un avertissement au premier lancement
|
||||
(*Informations complémentaires → Exécuter quand même*). Le script
|
||||
`desktop/scripts/sign-windows.ps1` signe automatiquement si
|
||||
`OBSIGATE_SIGN_CERT_PFX` est défini ; sinon il est un no-op explicite.
|
||||
Alternatives détaillées dans le [README desktop](../desktop/README.md).
|
||||
- **Signature de l'updater Tauri (gratuite, distincte de la signature Windows) :**
|
||||
générer une paire de clés, renseigner la `pubkey` dans
|
||||
`desktop/tauri.conf.json` et exposer la clé privée au build via
|
||||
`TAURI_SIGNING_PRIVATE_KEY`. La clé privée **ne doit jamais être commitée**.
|
||||
|
||||
```bash
|
||||
cargo tauri signer generate -w ~/.tauri/obsigate.key
|
||||
# → copier la clé publique affichée dans plugins.updater.pubkey
|
||||
```
|
||||
|
||||
## 5. Clôture
|
||||
|
||||
Une fois les 6 tests exécutés et OK, reporter le résultat dans
|
||||
[`docs/features/desktop-tauri.md`](./features/desktop-tauri.md) (section F) et
|
||||
mettre à jour le statut du #77 dans la [Roadmap](./ROADMAP.md).
|
||||
Reference in New Issue
Block a user