# Migration electron-updater + Gitea — Design ## Objectif Remplacer le système de mise à jour custom (download HTTP manuel + script batch NSIS) par `electron-updater`, tout en conservant Gitea comme hébergeur de releases. ## Contrainte Gitea Gitea ne supporte pas l'URL `/releases/latest/download/{filename}` (issue #31408 ouverte). On utilise donc une approche hybride : 1. Appel API Gitea pour découvrir la dernière version 2. `electron-updater` (generic provider) pour le cycle download → vérification sha512 → installation NSIS → restart ## Workflow de release 1. `npm run build` → génère `.exe` + `latest.yml` dans `dist/` 2. Créer le tag git, push 3. Sur Gitea : créer la release, uploader le `.exe` ET `latest.yml` ## Architecture ### Flux côté app ``` Démarrage (3s) → GET /api/v1/repos/mickael/dd-timer/releases/latest → Compare versions (tag_name vs app.getVersion()) → Si update dispo : autoUpdater.setFeedURL({ provider: "generic", url: "https://gitea.mickael-pol.fr/mickael/dd-timer/releases/download/{tag}/" }) autoUpdater.checkForUpdates() → electron-updater lit latest.yml → Télécharge le .exe (download-progress events) → update-downloaded → prêt à installer → quitAndInstall() au clic utilisateur ``` ### Changements par fichier | Fichier | Action | |---------|--------| | `package.json` | Ajouter `electron-updater` dep + config `publish` generic | | `main.ts` | Supprimer download HTTP, redirections, script batch. Garder appel API Gitea. Ajouter autoUpdater events. | | `preload.ts` | Inchangé (mêmes IPC channels) | | `UpdateBanner.ts` | Inchangé | ### IPC channels (conservés) - `update-available` → bannière disponible - `update-downloading` → bannière téléchargement - `update-progress` → { percent } - `update-ready` → bouton "Installer et redémarrer" - `update-error` → message erreur - `install-update` → déclenche quitAndInstall() ## Avantages - Suppression du script batch hack (~80 lignes) - Vérification d'intégrité sha512 automatique - Gestion NSIS install + restart native - Code main.ts simplifié (~40 lignes vs ~200) - Zéro infra supplémentaire