feat(mobile): vérification automatique de mise à jour de version #69
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/mobile-update-check"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #66
Réutilise l'API Releases de Forgejo (publique, sans authentification — même fait déjà exploité pour vérifier le statut de CI sans jeton) comme source de vérité pour "quelle est la dernière version" : zéro nouvel endpoint backend.
useAppUpdateCheckcompareApp.getInfo().version(@capacitor/app, nouvelle dépendance officielle) autag_namedeGET .../releases/latest, et pointe "Mettre à jour" vers l'URL stable de téléchargement déjà définie par #65.Comparaison de version en logique pure (
version-compare.ts), séparée du hook effectful — testée isolément via un test de composant Cypress (version-compare.cy.tsx, même patron quehighlight-tech-steps.cy.tsx: aucun montage, justedescribe/it/expectsur des fonctions pures, puisqueapps/webn'a pas d'autre outillage de test unitaire).Natif uniquement (
Capacitor.isNativePlatform()) :@capacitor/app/@capacitor/preferencesrestent en import dynamique à l'intérieur du hook, jamais dans le bundle web — même patron quecapacitor-token-store.ts— vérifié dans la sortie du build (deux petits chunks séparés, absents du bundle principal).Vérification au démarrage à froid + à la reprise depuis l'arrière-plan (
appStateChange), avec un throttle de 6h et mémorisation de la version déjà rejetée (@capacitor/preferences) pour ne jamais re-harceler sur la même version. Bannière discrète (pas uneDialogmodale) ; "Mettre à jour" ouvre le lien dans le navigateur système plutôt qu'un fluxPackageInstallerin-app (pas de permissionREQUEST_INSTALL_PACKAGES/code natif supplémentaire pour un gain marginal — voir le hors-scope du ticket).Vérifié localement :
pnpm lint✅,pnpm --filter web build✅ (TypeScript + Vite, deux chunks Capacitor bien séparés du bundle principal), le test de composantversion-compare.cy.tsx(9/9), etlayout/smoke/planning-pageen e2e (18/18 — confirme que la bannière, no-op sur le web, ne casse rien pour l'espace connecté existant).🤖 Generated with Claude Code