generate-sparkle-appcast
SKILL.md
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.- If not provided, reads from
.last-release-commitfile automatically.
- If not provided, reads from
- 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). .last-release-commit: stores the previous release commit hash (auto-read if--sincenot provided).- 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- (Optional) Override commit:
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)build/release-notes/{beta|stable}.zh.html+build/release-notes/{beta|stable}.en.html(generated, version history for Sparkle)docs/release-notes/{beta|stable}.zh.html+docs/release-notes/{beta|stable}.en.html(copied for hosting)
- Ensure the GitHub Release tag and asset name match the URL inside the generated appcast.
Notes
- The script preserves existing
<item>entries indocs/appcast.xmland prepends the new release item (deduped bysparkle:version), so new releases don't overwrite old ones. - The appcast includes two
<sparkle:releaseNotesLink>entries:xml:lang="zh"points to the Chinese page, and the default link points to the English page. - For cross-version upgrades, the appcast points
releaseNotesLinkto a channel history page (release-notes/{beta|stable}.*.html) that contains multiple version sections wrapped indata-sparkle-version="<CFBundleVersion>". Sparkle will mark the installed version in the HTML, and the page CSS hides versions older than the installed one. - 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. - After a successful release, update
.last-release-commitwith the new release commit hash for the next release.
Weekly Installs
2
Repository
caldis/mosGitHub Stars
19.3K
First Seen
Feb 2, 2026
Security Audits
Installed on
mcpjam2
gemini-cli2
replit2
junie2
windsurf2
zencoder2