diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..0c289ff --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,65 @@ +# Releasing BrewBar + +## Version scheme + +Semantic versioning, two or three numbers: + +- **1.1, 1.2, …** — new features (settings, new menu items, …) +- **1.0.1, 1.0.2, …** — bug fixes only +- **2.0** — reserved for something that changes how the app fundamentally works + +The version lives in `MARKETING_VERSION` in the Xcode project. Change it in +Xcode: target **BrewBar → General → Version** (this updates Debug and Release +together). The git tag and zip filename must match it exactly: version `1.1` +→ tag `v1.1` → `BrewBar-1.1.zip`. + +## Release checklist + +1. **Finish and merge the work.** Tests green, app manually verified: + ``` + xcodebuild -project BrewBar.xcodeproj -scheme BrewBar -configuration Debug -destination "platform=macOS" test + ``` + +2. **Bump the version** in Xcode (see above), commit. + +3. **Build and package** (from the project root): + ``` + xcodebuild -project BrewBar.xcodeproj -scheme BrewBar -configuration Release -destination "platform=macOS" build SYMROOT=build + ditto -c -k --sequesterRsrc --keepParent build/Release/BrewBar.app dist/BrewBar-.zip + shasum -a 256 dist/BrewBar-.zip + ``` + `ditto` (not `zip`) — it preserves code signatures and Finder metadata. + +4. **Update the cask** `Casks/brewbar.rb`: set `version` and paste the new + `sha256`. Brew refuses any download whose hash doesn't match this value. + +5. **Commit and push**: + ``` + git add Casks/brewbar.rb BrewBar.xcodeproj/project.pbxproj + git commit -m "release " + git push + ``` + +6. **Create the Forgejo release**: repo → Releases → New Release. + - Tag: `v` (must match the cask URL), target `main` + - Attach `dist/BrewBar-.zip` + - Title: `BrewBar `; description: what changed since last release + +7. **Upgrade on any machine**: + ``` + brew update && brew upgrade --cask brewbar + ``` + (`brew update` pulls the tap, sees the new cask version, `upgrade` fetches + the release zip.) + +## Notes + +- The app is signed with an Apple *Development* certificate, not notarized. + Installs need `--no-quarantine`; without it Gatekeeper blocks the app. +- `dist/` and `build/` are gitignored — release zips live only in Forgejo + releases, never in git. +- First install on a new machine: + ``` + brew tap maxsoch/brewbar https://forgejo.socheleau.fr/maxsoch/BrewBar.git + brew install --cask --no-quarantine maxsoch/brewbar/brewbar + ```