feat(desktop): download and install updates from GitHub Releases - #17
Merged
Conversation
- Check, Download, then Restart to Update; automatic checks default on and never install until asked - Signed releases publish a Sparkle appcast; Homebrew marks the cask as self-updating
- Retry after a Sparkle startup failure starts the updater again - Ineligible updates no longer show as Up to date - Check for Updates opens Settings → General
Keep Sparkle in-app updates and Check for Updates focusing Settings. Keep worktree project names and the 3/7-day completed-session cap.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Packaged Agent Notch builds could only point people at the GitHub releases page. They could not download or install an update in-app.
This wires Sparkle 2.9.6 to the GitHub Releases appcast and uses the same two-step flow as T3 Code: Check, Download, then Restart to Update. Automatic checks default on, run at launch and at most once a day, and never download or install until the user asks. Settings → General and the app menu expose Check for Updates. Homebrew marks the cask as self-updating (
auto_updates true) and livechecksgithub_latest.Signed release CI now requires
SPARKLE_ED_PRIVATE_KEY, generatesdist/appcast.xml, and attaches it to the GitHub release. The EdDSA public key is baked in atResources/SparklePublicEDKey. Sparkle verifies that signature and the Developer ID signature before replacing the app. System profile data is not sent. Unpackaged/debug hosts stay on the packaged-only message.Same commit also drops
ProjectIdentity(rows and notifications show the working-directory last path component, not the git worktree root) and the 7-day completed-session clamp (SessionHistoryPolicy). Default history retention is 30 days, and 30 / 90 / 365 are valid again.Verification
swift testswift test -c release./script/package_release.sh --adhoc./script/check_repository.shSmoke the packaged app: Check for Updates from Settings and the app menu, Download, Restart to Update, and confirm an unsigned/ad-hoc build does not pretend Sparkle can install. Confirm Homebrew
auto_updatesand that a signed release publishesappcast.xml.Compatibility and risk
SPARKLE_ED_PRIVATE_KEY(base64 EdDSA seed matchingResources/SparklePublicEDKey). Missing it fails the release job. Nested Sparkle.framework is signed with the app. Appcast enclosure URL is the GitHub release ZIP. Feed URL ishttps://github.com/Aforno/AgentNotch/releases/latest/download/appcast.xml.automaticallyCheckForUpdatesto true (was false) andhistoryRetentionDaysto 30. Existing preference values are kept. The old 7-day ceiling is gone, so previously stored 30 / 90 / 365 day choices apply again.workingDirectory's last path component. No hook schema or provider-install change.auto_updates truetellsbrew upgrade --caskthe app updates itself. Cask bumps onmainstill work for people who prefer brew.Screenshots
Settings → General now has Check for Updates, Download, and Restart to Update instead of a GitHub-releases link. The app menu has Check for Updates… after About. Screenshots not attached.