OverflowBar uses semantic version tags and publishes installable DMGs plus Sparkle ZIP/appcast assets through GitHub Releases. The DMG remains the primary manual distribution path; the ZIP is the in-app update payload and the third-party Homebrew Cask mirrors the DMG.
- Patch release: focused compatibility, capture, activation, or packaging fixes
- Minor release: a user-visible capability or meaningful workflow improvement
- Major release: an incompatible preference, architecture, or product-direction change
There is no release solely to satisfy a calendar. Important fixes should be released promptly; routine improvements are grouped into coherent updates.
-
Update
CFBundleShortVersionStringand increaseCFBundleVersioninOverflowBar/Resources/Info.plist. -
Update
Casks/overflowbar.rbwith the release version and the SHA-256 of the matching DMG. -
Move user-visible changes into
CHANGELOG.mdand updateRELEASE_NOTES.md. -
Build Debug and Release configurations.
-
Run live checks:
- arrow is present
- selected third-party items are managed
- protected system items remain visible
- second row opens and closes
- direct and temporary-reveal activation work
- Safe Reset and normal quit restore the layout
-
Build and verify the DMG and updater ZIP:
./scripts/create-dmg.sh hdiutil verify dist/OverflowBar-<version>.dmg shasum -a 256 -c dist/OverflowBar-<version>.dmg.sha256
The release workflow also generates and signs
dist/appcast.xmlusing theSPARKLE_ED_KEYGitHub Actions secret. Keep the private key out of the repository and publish only the public key inInfo.plist. -
Validate the Homebrew Cask metadata:
bash scripts/validate-homebrew-cask.sh
-
Commit and push the release source.
-
Tag the exact release commit:
git tag v<version> git push origin v<version>
The tag triggers .github/workflows/release.yml, which validates version
parity and monotonic build numbers, builds the DMG and updater ZIP, generates
the signed appcast, and creates the GitHub Release with all updater assets.
scripts/create-dmg.sh uses DEVELOPER_ID_APPLICATION when provided. Without it, the script creates an ad-hoc signed community build. Notarization must be added before describing a release as Gatekeeper-ready.