P3-7: Auto-update — appcast, EdDSA signing, Sparkle and WinSparkle #36
Labels
No labels
data-integrity
engine
platform
procurement
remote
scaffold
ui
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/cairn-desktop#36
Loading…
Add table
Add a link
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?
Depends on P3-6 and P0-5 (the EdDSA key must exist).
Why this is v1 scope
Sync bugs are data-integrity bugs. A fix shipped in month three otherwise sits unapplied on user machines for years, and every version ever released stays in the support matrix permanently. Retrofitting an updater is also harder than building it in, because the old client is the one that must be capable of updating itself.
The convenient fact
Sparkle (macOS) and WinSparkle (Windows) use the same design — the same RSS-based appcast format and the same EdDSA/Ed25519 signatures, with compatible tooling. The signature rides in the
sparkle:edSignatureattribute of the appcast enclosure. One publishing pipeline and one signing key serve both platforms.On Linux, ship no updater at all — the package manager, Flatpak or the AppImage updater owns it. Do not invent a fourth mechanism.
Files
internal/update/update.go,internal/update/appcast.go,build/appcast/generate.go,internal/update/update_test.goSecurity requirements — non-negotiable
Policy control
Auto-update must be disableable via policy (P3-1
autoUpdateEnabled). Managed fleets update through Intune or SCCM and will not accept an application that updates itself behind the administrator's back. Default on for unmanaged installs; honour policy where set.Publishing pipeline
appcast.xmlfrom release artifacts, signs each enclosure with the EdDSA key, and publishes toswisscairn.ch.Steps
git commit -s -m "feat(update): signed auto-update via Sparkle and WinSparkle"Acceptance criteria
autoUpdateEnabled=falseby policy, zero network requests go to the update URL.