generate-sparkle-appcast
Generate Mos Sparkle appcast.xml from the latest build zip and recent git changes (since a given commit), then sync to docs/ for publishing.
When & Why to Use This Skill
This Claude skill automates the generation of Sparkle appcast.xml feeds and multilingual release notes for macOS application updates. It streamlines the software distribution process by extracting git changes, handling Ed25519 signatures, and synchronizing assets for web publishing, ensuring a seamless and secure update experience for users.
Use Cases
- Automated Update Feed Management: Quickly generate and update Sparkle appcast.xml files from the latest notarized build artifacts to notify users of new releases.
- Localized Release Notes Generation: Automatically create professional HTML release notes in both English and Chinese by parsing git commit history since the previous version.
- Secure Software Publishing: Ensure update integrity by automatically calculating and embedding Sparkle Ed25519 signatures into the distribution feed.
- Documentation and Hosting Sync: Streamline the deployment workflow by automatically moving generated update metadata and release notes to the docs/ directory for immediate web hosting.
| name | generate-sparkle-appcast |
|---|---|
| description | Generate Mos Sparkle appcast.xml from the latest build zip and recent git changes (since a given commit), then sync to docs/ for publishing. |
Use this skill when the user wants to publish a new Mos release (stable or beta) and needs:
- Sparkle
appcast.xmlgenerated from the notarized.zipinbuild/ - Two hosted release notes pages (Chinese + English)
- Sparkle to show Chinese for all
zh*locales (Simplified/Traditional/HK/TW), and English for everything else
Inputs
--since <commit>: the previous release commit (exclusive). Used to generate release notes from changes since that commit.- A notarized+zipped app in
build/named:Mos.Versions.<version>-<YYYYMMDD>.<num>.zip(stable)Mos.Versions.<version>-beta-<YYYYMMDD>.<num>.zip(beta)
- Sparkle Ed25519 private key at
sparkle_private_key.txt(gitignored). - Optional env:
RELEASE_NOTES_BASE_URL(defaulthttps://mos.caldis.me/release-notes)RELEASE_NOTES_ZH_FILE/RELEASE_NOTES_EN_FILEto point to pre-written HTML files (otherwise the script writes tobuild/release-notes/<tag>.*.html)
What to do
- Run the skill script:
bash .codex/skills/generate-sparkle-appcast/scripts/generate_appcast.sh --since <commit>
- Confirm outputs:
build/appcast.xml(generated)docs/appcast.xml(copied formos.caldis.me/appcast.xml)build/release-notes/<tag>.zh.html+build/release-notes/<tag>.en.html(generated)docs/release-notes/<tag>.zh.html+docs/release-notes/<tag>.en.html(copied for hosting)
- Ensure the GitHub Release tag and asset name match the URL inside the generated appcast.
Notes
- The script emits two
<sparkle:releaseNotesLink>entries:xml:lang="zh"points to the Chinese page, and the default link points to the English page. - You can pre-create/edit
build/release-notes/<tag>.zh.htmlandbuild/release-notes/<tag>.en.htmlbefore running the script; the script will reuse them if present, otherwise it generates a default template from git history. - If the zip changes in any way (repacked/re-signed), you must re-run the script to regenerate
sparkle:edSignature.