<< All versions

Skill v1.0.0

currentLLM-judged scan90/100
martin-hausleitner/sonar-skills/release-sidestore
──Details
PublishedOctober 22, 2026 at 12:38 AM
Content Hashsha256:ecca800bc9ad3f0d...
Git SHA9cc0d3694c71
──Files
Files (1 file, 3.1 KB)
SKILL.md3.1 KBactive
SKILL.md · 67 lines · 3.1 KB

version: "1.0.0" 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

sh
# Auto-bump patch (e.g. 0.2.8 → 0.2.9)
make publish
# Or: explicit version
make publish VERSION=0.3.0

That's it. The script handles everything else:

  1. Reads CFBundleShortVersionString and CFBundleVersion from sonar/Resources/Info.plist.
  2. Bumps both (patch by default, or to the version you passed).
  3. Runs xcodebuild test on the pinned simulator UDID, skipping SonarUITests.
  4. Builds Release with CODE_SIGNING_ALLOWED=NO, IPHONEOS_DEPLOYMENT_TARGET=26.2.
  5. Packages the .app into releases/Sonar-v<NEW>.ipa and refreshes the legacy Sonar-unsigned-iOS26.ipa at the repo root.
  6. Calls scripts/release/update-apps-json.sh to insert the new version at the top of apps.json (the SideStore source).
  7. Updates releases/RELEASES.md.
  8. Commits all of the above with message release: Sonar v<NEW>.
  9. 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.
All versions