Skip to content

Wire Sparkle auto-updates end-to-end via GitHub Pages#5

Merged
barscn merged 2 commits into
mainfrom
feat/sparkle-auto-updates
Jul 2, 2026
Merged

Wire Sparkle auto-updates end-to-end via GitHub Pages#5
barscn merged 2 commits into
mainfrom
feat/sparkle-auto-updates

Conversation

@barscn

@barscn barscn commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

Wires Capsule's Sparkle auto-updates end-to-end (Option B).

What changed

  • App/Info.plist: SUFeedURLhttps://capsule-native.github.io/appcast.xml; real EdDSA SUPublicEDKey baked in (private key is the SPARKLE_ED_PRIVATE_KEY CI secret).
  • Scripts/release/appcast.sh: honours RELEASE_DOWNLOAD_URL_PREFIX → passes --download-url-prefix so the appcast's enclosure URLs point at the tag's GitHub Release assets.
  • .github/workflows/release.yml: sets that prefix from the tag, and adds a tag↔version guard that fails the build if vX.Y.ZCFBundleShortVersionString.
  • Scripts/release/README.md: documents the new flow + the generate_appcast-only-signs-when-SUPublicEDKey-matches gotcha.
  • Repoints moved org/repo references (issue-template links).

Hosting (separate repo)

The appcast is published by a Sync appcast workflow in capsule-native/capsule-native.github.io, which pulls releases/latest/download/appcast.xml and commits it (own GITHUB_TOKEN, no cross-repo auth — the org disables deploy keys).

Verification

  • make check clean; 885 unit tests pass.
  • Signing path validated locally: appcast comes out with the correct release-download URL and a valid sparkle:edSignature.

Before a real signed release

Add the Apple secrets to this repo: APPLE_TEAM_ID, DEVELOPER_ID_CERT_P12_BASE64, DEVELOPER_ID_CERT_PASSWORD, NOTARY_APPLE_ID, NOTARY_PASSWORD. (SPARKLE_ED_PRIVATE_KEY is already set.)

🤖 Generated with Claude Code

barscn and others added 2 commits July 2, 2026 16:19
Point SUFeedURL at the capsule-native.github.io appcast and bake in the real
EdDSA public key. The release workflow signs the appcast and sets the enclosure
download URLs to the tag's Release assets (--download-url-prefix); the Pages
repo's sync workflow republishes appcast.xml at the feed URL. Adds a tag/version
guard so a vX.Y.Z tag can't ship mismatched artifacts, and repoints the moved
repo/org references.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JYNmieH7AYvXys56bV8B7p
Public repo — drop the maintainer-only credential how-to (Developer ID cert
export, notarytool store-credentials, the secrets table). Keep the pipeline and
development guides: update flow, run/steps, environment, cutting a release, the
fork-fallback, and the generate_appcast SUPublicEDKey-match gotcha.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JYNmieH7AYvXys56bV8B7p
@barscn barscn merged commit ab91209 into main Jul 2, 2026
1 of 2 checks passed
@barscn barscn deleted the feat/sparkle-auto-updates branch July 6, 2026 11:18
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