Skip to content

Automate channel-aware Sparkle appcast generation and publishing in the release workflow #554

Description

@schuyler

Context

#129 lands the in-app Sparkle 2 migration: single feed at https://macdown.app/sparkle/macdown3000/stable/appcast.xml, pre-releases delivered as a beta channel in that one appcast (the old dual stable/testing feed scheme is retired), EdDSA signing with the public key in Info.plist (placeholder until the real key is generated).

The Nov 2025 automation plan on #129 predates the channel decision and assumed separate stable/testing appcast files routed by directory — it needs a redesign around a single channel-aware appcast before implementation.

Scope

Automate appcast generation and publishing in .github/workflows/release.yml:

  1. Channel-aware generation: run Sparkle's generate_appcast with --channel beta for pre-release version tags (-beta, -alpha, -rc), no channel for stable tags; one appcast file containing both, with history preserved (download existing appcast before regenerating).
  2. EdDSA signing via a SPARKLE_EDDSA_PRIVATE_KEY GitHub secret; validate secrets up front, clean up key material afterward (even on failure).
  3. Publishing: upload to macdown.app hosting (mechanism TBD — SSH per the original plan, or a simpler alternative if hosting has changed), with retry + known_hosts pinning if SSH.
  4. Docs: extend plans/release-process.md with the automated flow and required secrets.

Prerequisites (manual, before this can be tested)

First real test should be a beta tag so failures don't affect the stable channel.

Related to #129

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions