FEAT: Auto-update agent — mode natif Linux/Windows (installateur + vérification de version) #96
Labels
No labels
bug
chore
design
dx:ci
dx:database
dx:dotnet
dx:infra
dx:security
dx:tests
dx:ui
etape-1
etape-2
etape-3
etape-4
etape-5
etape-6
etape-7
feature
priority-high
priority-low
priority-medium
security
spec
tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nonobis/Heimdall#96
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Contexte
Les agents Heimdall n'ont aucun mécanisme de mise à jour automatique. Décision du chef de projet (12/08/2026) : s'aligner sur le modèle Pangolin — le central vérifie la version (endpoint serveur avec cache, façon
getNewtVersion.ts), l'agent télécharge et s'auto-update avec contrôle par site.Modèle Pangolin retenu (fosrl/pangolin, étudié le 12/08/2026)
server/routers/newt/getNewtVersion.ts) : fetchrepos/fosrl/newt/releases, cache 1 h + stale-while-revalidate, renvoie{ version, assets: { plateforme: { url, sha256 } } }(digests = champdigestde l'API).sites.autoUpdateEnabled+ override global par org (settingsEnableGlobalNewtAutoUpdate) — l'org peut forcer, le site peut surcharger (updateSite.ts).ProductUpdates.tsxcompareenv.app.versionà la dernière dispo (semvergt), cloche/badge de notification.État actuel Heimdall
1.0.0(voir #95) ;AgentDetail.razoraffiche déjà_agent.Version.À faire
getNewtVersion.ts) :GET /api/updates/latest(policy agent ou admin) qui fetch l'API Forgejorepos/nonobis/Heimdall/releases/latest(token de lecture ou public), cache 1 h + stale-while-revalidate, renvoie{ version, assets: { linux-x64: { url, sha256 }, linux-arm64: {...}, win-x64: {...} } };AgentUpdateService:GET /api/updates/latest(via le canal d'auth agent existant, X-API-Key) ;InformationalVersion, voir #95) → si nouvelle version : télécharge le binaire de sa plateforme, vérifie sha256, remplacement atomique (binaire neuf +rename), redémarrage du service (systemdRestart=on-failure/ service Windows) ;AutoUpdateEnabledsur l'entité Site (+ réglage global dans Settings) ; le central inclut la décision dans la config pushée à l'agent (GET /api/settings/agent/{id}, comme les autres settings) ;AgentDetail.razor: version courante + version dispo + badge « mise à jour disponible » (comparaison semver, façon ProductUpdates) + bouton « Mettre à jour » ;install/install-agent.sh(Linux : détection OS/arch, téléchargement, systemd unit) +install/install-agent.ps1(Windows : service) ;get-installer.shde Pangolin : télécharge la dernière version et réinstalle par-dessus).Critères d'acceptation
Fichiers concernés
src/Heimdall.Web/Controllers/UpdatesController.cs(nouveau, endpoint /api/updates/latest)src/Heimdall.Agent/Services/AgentUpdateService.cs(nouveau)src/Heimdall.Agent/AgentOptions.cs(UpdateCheckIntervalHours)src/Heimdall.Domain/Entities/Site.cs(AutoUpdateEnabled+ migration)src/Heimdall.Web/Components/Pages/AgentDetail.razor(section version/update)install/install-agent.sh+install/install-agent.ps1(nouveaux)Maquette
Description
Onglet « Mise à jour » de la fiche agent (mode natif) : version installée vs disponible, bouton « Mettre à jour vers vX.Y.Z », statut (À jour / Mise à jour disponible / Redémarr
Maquette
Décision chef de projet (12/08/2026) : aligné sur le modèle Pangolin — le central expose la version (cache 1h + stale-while-revalidate), l'agent télécharge/vérifie sha256, contrôle d'auto-update par site.
Maquette the-designer intégrée (14/08/2026) :