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

- 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:
2026-09-12 09:29:47 -04:00
parent 31d4be8015
commit d3299166bb
14 changed files with 519 additions and 29 deletions
+58
View File
@@ -12,6 +12,7 @@ Application desktop native pour [ObsiGate](https://git.dracodev.net/Projets/Obsi
- [Configuration des vaults](#configuration-des-vaults)
- [Architecture](#architecture)
- [Fonctionnalités natives](#fonctionnalites-natives)
- [Signature de code Windows](#signature-de-code-windows)
- [Dépannage](#depannage)
---
@@ -49,6 +50,11 @@ sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1
:: Mêmes options, inclut le raccourci
```
> **Binaires non signés** : les releases ne sont pas signées avec un certificat
> Windows. Au premier lancement, SmartScreen affiche « Windows a protégé votre
> PC » → cliquer **Informations complémentaires → Exécuter quand même**.
> Voir [Signature de code](#signature-de-code-windows) pour les alternatives.
### macOS
> Non supporté pour le moment (priorité Linux/Windows).
@@ -260,6 +266,58 @@ Arrêt (tray → Quitter ou Ctrl+C) :
---
## Signature de code Windows
La signature de code est **optionnelle** : sans elle, l'application fonctionne,
mais SmartScreen affiche un avertissement au premier lancement. Les binaires
ObsiGate sont actuellement distribués **non signés**.
### Signer localement
Le script `scripts/sign-windows.ps1` signe le binaire et les installeurs après un
`cargo tauri build`. Il lit les identifiants depuis l'environnement (jamais
commités) et est un **no-op explicite** si aucun certificat n'est fourni :
```powershell
$env:OBSIGATE_SIGN_CERT_PFX = "C:\certs\obsigate.pfx"
$env:OBSIGATE_SIGN_CERT_PASSWORD = "..."
$env:OBSIGATE_SIGN_TIMESTAMP_URL = "http://timestamp.digicert.com"
.\scripts\sign-windows.ps1
```
### Alternatives au certificat
| Option | Coût indicatif | Effet SmartScreen |
|---|---|---|
| **Livrer non signé** (statu quo) | 0 € | Avertissement → « Exécuter quand même » |
| **SignPath.io** (projet open source) | Gratuit si éligible OSS | Réputation gérée par le service |
| **Certum Open Source Code Signing** | ~70-100 €/an | Réputation progressive |
| **Certificat OV** | ~150-400 €/an | Avertit tant que la réputation n'est pas établie |
| **Certificat EV** | ~300-700 €/an + token USB/HSM | Réputation **immédiate** |
| **Azure Trusted Signing** | ~10 $/mois | Bonne réputation, signature cloud |
| **Certificat auto-signé** | 0 € | Inutile en distribution publique |
### Signature de l'auto-update (gratuite)
Indépendante de la signature Windows, la signature des mises à jour Tauri repose
sur une paire de clés que vous générez vous-même :
```bash
cargo tauri signer generate -w ~/.tauri/obsigate.key
```
- La **clé publique** est déjà renseignée dans `plugins.updater.pubkey`
(`tauri.conf.json`).
- La **clé privée** doit être exposée au build via `TAURI_SIGNING_PRIVATE_KEY`
(jamais commitée) ; dans le CI, via les secrets Gitea
`TAURI_SIGNING_PRIVATE_KEY` / `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`.
- Le CLI produit des `.sig` par artefact (`*.msi.sig`, `*.AppImage.sig`, …).
> Le manifeste `latest.json` consommé par l'updater n'est pas généré par le CLI :
> voir [DEVELOPMENT_AND_RELEASES §2bis](../docs/DEVELOPMENT_AND_RELEASES.md#2bis-signature-des-mises-à-jour-updater-tauri).
---
## Dépannage
### Le backend ne démarre pas