`downloadAndInstall` is one call that downloads AND installs (updater.rs:723-729), and the `Finished` event is a no-op in useUpdater.ts:119-121. `READY_TO_INSTALL` is therefore dispatched only after `dpkg -i` returns, so the pkexec prompt opens while the card still reads "Téléchargement en cours…". The checklist told the tester to tick `readyToInstall` before the prompt. That ordering neutralized the polkit precondition the page exists to enforce: with no agent the app hangs in `downloading`, not in `readyToInstall`, so a tester following the checklist files "the download stalls" instead of "no polkit agent" — the exact false trace this page is written to prevent. Also states plainly that at `readyToInstall` the .deb is already on disk and the button only calls `relaunch()`; the label misleads on this target. Three smaller corrections from the same review: - The update triggers are four manual sites, not two: UpdateCard idle / upToDate refresh / error retry, plus ErrorPage.tsx:82 — which only detects and offers no download path. The load-bearing claim, "no automatic check in the app", was already right. - "Si ça casse" now spells out that DELETE and PUT hit different API prefixes (/api/v1/packages/ vs /api/packages/, release.yml:217-219, which carries a comment about exactly this). Replaying both against one URL 404s at the worst possible moment. - The SKILL.md changelog entry moves back into date order. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
6.5 KiB
| name | description | user-invocable | updated |
|---|---|---|---|
| release | Release a new version of Simpl-Resultat (bump, changelog, tag, push) | true | 2026-07-27 |
/release — Release Simpl-Resultat
Context injection
- Lire version dans
src-tauri/Cargo.tomletpackage.json - Lister les derniers tags :
git tag --sort=-v:refname | head -10 - Lire
CHANGELOG.mdetCHANGELOG.fr.md(dernieres entrees)
Workflow
-
Pré-vol — revalider le tip localement. Les workflows
check-rust.yml/check-frontend.ymlne tournent pas surmain: le tip mergé n'a jamais été vu par le CI (le dernier run vert portait sur la branche d'issue avant merge), et le tag grave ce tip exact dans des binaires distribués. Lancernpm run build && npm test(vitest) +cd src-tauri && cargo check && cargo test. Vérifier aussi que.claude/worktrees/est vide (worktrees leftover → vitest récurse et gonfle le compteur). Ne tagger que sur un tip vert. -
Determiner la nouvelle version (argument utilisateur ou demander)
-
Bump version dans les 5 fichiers :
src-tauri/Cargo.toml(ligneversion = "...")src-tauri/Cargo.lock(bloc[[package]] name = "simpl-result"+ sa ligneversion = "..."; ne PAS regenerer avec cargo)src-tauri/tauri.conf.json(champ"version")package.json(champ"version")package-lock.json(deux champs"version"— root ~ligne 3 et le package racine""~ligne 9)- Si
package-lock.jsonest stale (hygiene warningpackage-lock.json plus ancien que package.json) :npm install --package-lock-only --no-audit --no-fundpour resync. Note : peut ajouter des entrees bundled optionnelles (tailwindcss oxide wasm etc.) — cosmetique, pas d'install effective.
- Si
-
Mettre a jour les 2 changelogs — format Keep a Changelog :
CHANGELOG.md(EN) : header## [Unreleased]CHANGELOG.fr.md(FR) : header## [Non publié](PAS[Unreleased]— ne pas le confondre avec un changelog vide)- Pattern de migration : transformer le header « non publié » de chaque fichier en
## [X.Y.Z] - YYYY-MM-DD, puis recreer la section « non publié » vide au-dessus pour accueillir les prochaines entrees. Le header differe selon la langue. Ne pas deplacer le contenu — les sections sont laissees en place.
-
Si changement d'architecture : mettre a jour
docs/architecture.md -
Commit :
chore: release vX.Y.Z(ajouter les 7 fichiers : 5 bumps + 2 changelogs) -
Tag annote (permet une release notes par tag, lisible via
git show vX.Y.Z) :git tag -a vX.Y.Z -m "Release X.Y.Z - <bullet highlights>" -
Push :
git push origin main && git push origin vX.Y.Z -
Forgejo CI build automatique (Windows + Linux) via
release.ymlsuron: push: tags: v* -
Post-CI — vérifier la release publiée. Surveiller
release.yml(outilMonitorsur le run), puis vérifier la release réellement attachée —status=successdu workflow ne suffit pas :- Les 7 artefacts attendus :
.exeNSIS,.deb,.rpm, leurs 3 signatures.sig, etlatest.json. - Le contenu de
latest.json(il pilote l'auto-update des installations existantes) : champversioncorrect, signatures non vides pour les deux plateformes, URLs pointant vers les bons binaires, notes extraites du CHANGELOG.
- Les 7 artefacts attendus :
-
Post-CI — dérouler un vrai cycle de mise à jour si la release touche
tauri-plugin-updater, ses dépendances (reqwest/rustls-webpki,tar),release.yml, ou la configupdaterdetauri.conf.json:docs/qa-update-cycle.md.Inspecter
latest.jsonprouve qu'il est bien formé, pas qu'il installe. Le reste de la chaîne — téléchargement TLS, vérification de signature, exécution de l'installeur, redémarrage — n'est exercé par aucun test :cargo check/cargo testprouvent que ce code compile, rien de plus. Une régression s'y voit chez l'utilisateur, au moment de la mise à jour.Deux pièges qui font cocher la checklist sans rien vérifier, détaillés dans la doc : tester depuis une machine déjà à la nouvelle version (
check()répond « à jour ») et tester sans clé Base+ (l'auto-update est verrouillé par édition, l'app bascule ennotEntitledavant même d'interroger le serveur).Si la checklist n'est pas déroulée, l'écrire avec la raison sur la release plutôt que de laisser le silence.
Regles
- JAMAIS
git push --tags— toujours push le tag individuellement - Toujours mettre a jour les 2 changelogs (EN + FR)
- Format Keep a Changelog :
## [X.Y.Z] - YYYY-MM-DD - Les changelogs sont bundles dans
public/pour l'affichage in-app - Tag annote (
-a), pas lightweight : les artefacts CI reference le tag pour les release notes - Tagger publie vers l'extérieur :
release.ymlpousse le JSON d'updater, donc les utilisateurs installés reçoivent la mise à jour automatiquement. Confirmer avec Max avant de tagger.
Changelog
- 2026-04-19 — Added Cargo.lock + package-lock.json to bump list,
npm install --package-lock-onlyfallback when lockfile stale, explicit[Unreleased]migration pattern, annotated tags (#102/#112 release cycle) - 2026-07-01 — Documenter que le header FR est
## [Non publié](≠[Unreleased]), pour éviter le faux diagnostic « changelog FR vide » lors de la migration. Source : session 5466da98. - 2026-07-13 — Étape 0 (pré-vol) : revalider le tip localement avant de tagger —
check.ymlne tourne pas surmain, le tip mergé n'a jamais été vu par le CI ; vérifier.claude/worktrees/vide (vitest récurse sinon). Étape 9 (post-CI) : vérifier la release publiée — 7 artefacts attendus + contenu delatest.json(pilote l'auto-update) ;status=successne suffit pas. Règle : tagger publie vers l'extérieur (updater automatique) → confirmer avec Max avant de tagger. Source : session fdda84cb (release v0.13.0). - 2026-07-27 — Étape 10 (post-CI) : dérouler un vrai cycle de mise à jour via
docs/qa-update-cycle.mdquand la release touche l'updater. Inspecterlatest.jsonprouve qu'il est bien formé, pas qu'il installe : le téléchargement TLS, la vérification de signature, l'exécution de l'installeur et le redémarrage ne sont exercés par aucun test. Deux pièges qui font cocher sans vérifier — tester depuis la machine déjà à jour (check()répond « à jour ») et tester sans clé Base+ (auto-update verrouillé par édition,notEntitledavant toute requête). Source : session 50ac88d9 (#315, découvert en traitant les advisoriestar/rustls-webpkide #310).