| name | release-sidestore |
| description | Cut a new Sonar SideStore release. Use when the user says "publish", "ship", "release", "bump version", or wants the in-app SideStore Update button to surface a new build. Runs the validated `make publish` flow — bumps Info.plist, runs the iPhone 16 Pro test suite, builds an unsigned IPA, archives it under releases/, regenerates apps.json, commits, pushes, and creates a GitHub release. |
release-sidestore
Run a Sonar release through the SideStore source. The pipeline is scripts/release/publish.sh, surfaced via make publish. This skill exists because the release flow has been validated in production — don't improvise around it.
When to invoke
- "publish a new version" / "ship 0.3.0" / "cut a release"
- "the SideStore source needs the latest build"
- After a meaningful change is merged and the user wants the in-app Update button to show it
Preconditions
- Working tree on
main, clean (git status empty, no M or ??).
- iPhone 16 Pro simulator booted; default UDID is
DCF24978-ABA7-4DC1-9E95-D96B0CE16CD4. Override with SIM_UDID=….
make lint passes locally.
- You are in the repo root (
Sonar/).
If any precondition fails, stop and tell the user — don't paper over it with --no-verify or by skipping the test step.
The flow
make publish
make publish VERSION=0.3.0
That's it. The script handles everything else:
- Reads
CFBundleShortVersionString and CFBundleVersion from sonar/Resources/Info.plist.
- Bumps both (patch by default, or to the version you passed).
- Runs
xcodebuild test on the pinned simulator UDID, skipping SonarUITests.
- Builds Release with
CODE_SIGNING_ALLOWED=NO, IPHONEOS_DEPLOYMENT_TARGET=26.2.
- Packages the
.app into releases/Sonar-v<NEW>.ipa and refreshes the legacy Sonar-unsigned-iOS26.ipa at the repo root.
- Calls
scripts/release/update-apps-json.sh to insert the new version at the top of apps.json (the SideStore source).
- Updates
releases/RELEASES.md.
- Commits all of the above with message
release: Sonar v<NEW>.
- Pushes
main and creates a gh release with the .ipa attached.
Idempotency
publish.sh refuses to overwrite releases/Sonar-v<NEW>.ipa if it already exists, and refuses to reuse a local git tag. If you re-run after a partial failure, either:
- delete the half-built IPA in
releases/ and re-run, or
- pass an explicit higher
VERSION=.
Don't rm -rf blindly. Read the error first.
After it succeeds
- Open the in-app Update-Button to verify SideStore picks up the new version from
apps.json.
- The download URL is
https://raw.githubusercontent.com/Martin-Hausleitner/Sonar/main/releases/Sonar-v<NEW>.ipa — confirm it 200s.
What this skill does NOT do
- No App Store / TestFlight upload — that's
scripts/release/build-appstore.sh, separate flow.
- No release-notes generation. The GitHub release notes default to the commit subject; if you want richer notes, edit the release on GitHub after the fact.
- No rollback. If a release is broken, ship a higher patch version with the fix.