Goal
Let users install Lyrico with a single command:
brew install --cask toba/lyrico/lyrico
Why a cask, not a formula
Lyrico is a SwiftUI .app bundle, not a CLI binary. Homebrew distributes GUI apps via casks (brew install --cask) rather than formulas. The /brew skill in this repo is built for goreleaser-style CLI tools and would generate a broken formula (bin.install, tool version test) if used as-is.
Prerequisites
These must be in place before the cask can work:
Cask file
The skill doesn't generate casks — write Casks/lyrico.rb by hand, roughly:
cask "lyrico" do
version "0.2.0"
sha256 "…"
url "https://github.com/toba/lyrico/releases/download/v#{version}/Lyrico-#{version}.dmg"
name "Lyrico"
desc "Floating synced-lyrics overlay for Swinsian"
homepage "https://github.com/toba/lyrico"
depends_on macos: ">= :tahoe" # macOS 26+
app "Lyrico.app"
zap trash: [
"~/Library/Caches/Lyrico",
"~/Library/Preferences/app.toba.lyrico.plist",
]
end
CI step to update the cask
After the release artifact is uploaded, a job should:
- Compute
sha256 of the .dmg
- Clone
toba/homebrew-lyrico
- Rewrite
Casks/lyrico.rb with the new version + sha256
- Commit + push using
HOMEBREW_TAP_TOKEN
Acceptance criteria
Out of scope
- Auto-update inside the app (Sparkle / built-in updater) — separate issue
- Upstreaming to homebrew-cask (the official tap) — only sensible after the project is stable and popular enough to meet their inclusion criteria
Related
- Earlier conversation:
/brew skill flagged as CLI-only; opted to defer until release pipeline exists
Distribution model
User signs + notarizes the .dmg locally (with their Developer ID) and uploads it to a GitHub Release. CI does the cask bump only — no signing secrets needed.
In-tree
- Shared scheme
Lyrico added under the Xcode project so xcodebuild -scheme Lyrico works
.github/workflows/release.yml — fires on release: published, downloads the user-uploaded Lyrico-X.Y.Z.dmg, computes sha256, rewrites Casks/lyrico.rb in toba/homebrew-lyrico
README.md — documents brew install --cask toba/lyrico/lyrico
Required secrets
Per-release flow
- Bump
MARKETING_VERSION / CURRENT_PROJECT_VERSION in the Xcode project
- Archive in Xcode (Developer ID, manual signing)
- Notarize + staple locally (
xcrun notarytool submit … --wait && xcrun stapler staple)
- Package as
Lyrico-X.Y.Z.dmg
gh release create vX.Y.Z Lyrico-X.Y.Z.dmg --generate-notes
- CI fires, bumps the cask
Still required before first release
👾 This issue is managed by Jig. Edits made here will be overwritten.
Goal
Let users install Lyrico with a single command:
Why a cask, not a formula
Lyrico is a SwiftUI
.appbundle, not a CLI binary. Homebrew distributes GUI apps via casks (brew install --cask) rather than formulas. The/brewskill in this repo is built for goreleaser-style CLI tools and would generate a broken formula (bin.install,tool versiontest) if used as-is.Prerequisites
These must be in place before the cask can work:
.github/workflows/release.ymlthat on tag push:Lyrico.appfor arm64.dmg.sha256to the GitHub ReleaseMACOS_CERTIFICATE(base64 .p12),MACOS_CERTIFICATE_PASSWORDAC_API_KEY_ID,AC_API_KEY_ISSUER_ID,AC_API_KEY(for notarization via App Store Connect API)HOMEBREW_TAP_TOKEN(fine-grained PAT with Contents read/write on the tap repo)toba/homebrew-lyricocreated on GitHub with aCasks/directorycompanions.brewin.jig.yaml:toba/homebrew-lyrico(kept for parity with other toba projects, even though the skill itself doesn't manage casks)Cask file
The skill doesn't generate casks — write
Casks/lyrico.rbby hand, roughly:CI step to update the cask
After the release artifact is uploaded, a job should:
sha256of the.dmgtoba/homebrew-lyricoCasks/lyrico.rbwith the new version + sha256HOMEBREW_TAP_TOKENAcceptance criteria
toba/lyricoproduces a notarized, stapled.dmgon the releaseCasks/lyrico.rbintoba/homebrew-lyricowith matching version + sha256brew tap toba/lyrico && brew install --cask lyricoinstalls and launches the app without Gatekeeper warningsbrew uninstall --cask lyrico --zapcleans up caches and prefsOut of scope
Related
/brewskill flagged as CLI-only; opted to defer until release pipeline existsDistribution model
User signs + notarizes the
.dmglocally (with their Developer ID) and uploads it to a GitHub Release. CI does the cask bump only — no signing secrets needed.In-tree
Lyricoadded under the Xcode project soxcodebuild -scheme Lyricoworks.github/workflows/release.yml— fires onrelease: published, downloads the user-uploadedLyrico-X.Y.Z.dmg, computes sha256, rewritesCasks/lyrico.rbintoba/homebrew-lyricoREADME.md— documentsbrew install --cask toba/lyrico/lyricoRequired secrets
HOMEBREW_TAP_TOKEN(fine-grained PAT, Contents read/write ontoba/homebrew-lyrico) — readyPer-release flow
MARKETING_VERSION/CURRENT_PROJECT_VERSIONin the Xcode projectxcrun notarytool submit … --wait && xcrun stapler staple)Lyrico-X.Y.Z.dmggh release create vX.Y.Z Lyrico-X.Y.Z.dmg --generate-notesStill required before first release
Casks/lyrico.rbintoba/homebrew-lyrico(placeholderversion+sha256— CI overwrites). Usedepends_on macos: ">= :tahoe".v0.x.yend-to-end and confirm the cask bump lands👾 This issue is managed by Jig. Edits made here will be overwritten.