OverflowBar publishes DMGs and Sparkle ZIP/appcast assets through GitHub Releases. The DMG is the primary manual download; the third-party Homebrew Cask mirrors the published DMG.
- Patch: focused compatibility, capture, activation, or packaging fixes.
- Minor: a user-visible capability or meaningful workflow improvement.
- Major: an incompatible preference, architecture, or product-direction change.
There is no release solely to meet a calendar.
-
Update CFBundleShortVersionString and increment CFBundleVersion in OverflowBar/Resources/Info.plist.
-
Update the Cask version in Casks/overflowbar.rb.
-
Update CHANGELOG.md and RELEASE_NOTES.md with user-visible changes.
-
Build Debug and Release configurations, run XCTest, and run the native-engine and package checks.
-
Run the native acceptance matrix. Builds and generic icons do not establish physical GUI reliability.
-
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.sha256CI signs appcast.xml with the SPARKLE_ED_KEY GitHub Actions secret. Keep the private key out of the repository.
-
Run Homebrew Cask and documentation-link checks:
bash scripts/validate-homebrew-cask.sh ruby scripts/check-doc-links.rb -
Commit and push the release source. Run Release preflight from Actions against that exact commit. Preflight checks the production signing key and exercises the signed updater over a disposable copy of the published v1.0.19 app. It does not publish; never use its localhost feed as a release feed.
-
Create a signed annotated version tag on the verified commit and push it:
git tag -s v<version> -m "OverflowBar <version>" git push origin v<version> -
After publication, download the exact DMG and its checksum file. Verify both and update the Cask SHA-256 to the checksum of the published artifact, then push the Cask update to the default branch.
-
Check that the release page, installer links, README badge, and Homebrew Cask agree.
The tag triggers .github/workflows/release.yml, which validates version parity and monotonic build numbers, builds the DMG and updater ZIP, signs the Sparkle feed, and publishes the GitHub Release. A stable release is marked as latest.
If published release notes need correction, update RELEASE_NOTES.md on the default branch and run Refresh release notes from Actions for that version. The workflow verifies a refreshed signed appcast and updates the release without rebuilding the app.
scripts/create-dmg.sh uses DEVELOPER_ID_APPLICATION when set. Otherwise it ad-hoc signs the community build, which is not notarized. Do not describe an ad-hoc build as notarized or as Gatekeeper-approved. The Homebrew Cask uses the exact published DMG checksum, which can vary between builds.