Skip to content

Turn on Sparkle updates and a release script (v0.2.0 ready, key not made yet) - #2

Open
jonnilundy wants to merge 1 commit into
mainfrom
feat/updates
Open

jonnilundy wants to merge 1 commit into
mainfrom
feat/updates

Conversation

@jonnilundy

Copy link
Copy Markdown
Owner

What

Flowriter gets an updater and a release process, copied from Main Thing.

  • Installed apps read appcast.xml in this repo (raw GitHub URL, main branch) once a day and install a newer version when they quit. Flowriter menu, Check for Updates… does it on demand.
  • Releases are ad hoc signed, not notarized (first install: right-click, Open). Updates are checked against an EdDSA release key.
  • scripts/release.sh X.Y.Z is a dry run; --publish commits, tags, creates the GitHub release and pushes main. It reads the key from 1Password, never writes it to disk, and refuses a placeholder or mismatching key, a non-main branch, a dirty tree, or a taken tag.
  • scripts/test-update.sh rewritten (it still said Flo State). Uses a throwaway key.
  • release-notes/0.2.0.md is a draft built from merge titles: please read it.

Tested here

  • Release build, then a real headless update on an ad hoc signed app: installs, signature verified. With --wrong-key: Sparkle refuses it.
  • Full release.sh 0.2.0 dry run with a throwaway key: signed zip, valid appcast item, nothing published.
  • Refusals: placeholder key, key mismatch, publish from a branch, publish with test overrides, bad version.
  • A placeholder-key build starts no updater.

Not done: the real signing key

op hangs on the Mac this was built on, so the key could not be made here. It needs one step on your Mac, then a commit of the public key. Until then release.sh refuses to run. Steps are in the header of scripts/release.sh.

🤖 Generated with Claude Code

Installed copies read appcast.xml from this repo (raw.githubusercontent.com, main) once a day
and install a newer version when they quit, after checking its EdDSA signature against the
release key. Releases stay ad hoc signed, like Main Thing.

- bundle.sh writes SUFeedURL, SUPublicEDKey (scripts/sparkle-public-key.txt) and the update
  settings. The key is a placeholder until it is created, and the app starts no updater with it.
- ForkIdentity.updatesEnabled is true; AppUpdater.isConfigured refuses the placeholder key.
- release.sh: dry run by default, --publish commits, tags, creates the GitHub release and pushes
  main. The signing key is read from 1Password and piped, never written to disk, and must match
  the committed public key. Refuses a placeholder key, a non-main branch, a dirty tree, a taken tag.
- test-update.sh rewritten for Flowriter with a throwaway key. Checked: a signed update installs on
  an ad hoc signed app, an update signed with another key is refused.
- release-notes/0.2.0.md, README "Updates and releases".

The real key is not made yet: it has to be created where 1Password works (the header of
release.sh has the three commands), then its public half goes in sparkle-public-key.txt.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant