Skip to content

Distribute Tuttle via Homebrew Cask #319

Description

@clstaudt

Goal

Make Tuttle installable via brew install --cask tuttle from the official homebrew-cask repository.

Prerequisites

Apple Developer signing + notarization

The current build uses ad-hoc code signing. Official Homebrew Casks must pass macOS Gatekeeper without users manually stripping quarantine.

  • Enroll in the Apple Developer Program ($99/year)
  • Obtain Developer ID Application and Developer ID Installer certificates
  • Configure electron-builder to sign with the real identity (replace CSC_IDENTITY_AUTO_DISCOVERY=false in justfile)
  • Add notarization via notarytool (electron-builder supports this natively via afterSign hook or notarize config in ui/package.json)
  • Staple the notarization ticket to the .dmg

Stable artifact URLs

Already in place via GitHub Releases:

https://github.com/tuttle-dev/tuttle/releases/download/v{VERSION}/Tuttle-{VERSION}-macOS-arm64.dmg

Cask definition

Submit a PR to homebrew/homebrew-cask with Casks/t/tuttle.rb:

cask "tuttle" do
  version "3.8.0"
  sha256 "PUT_SHA256_HERE"

  url "https://github.com/tuttle-dev/tuttle/releases/download/v#{version}/Tuttle-#{version}-macOS-arm64.dmg"
  name "Tuttle"
  desc "Painless business planning for freelancers"
  homepage "https://github.com/tuttle-dev/tuttle"

  livecheck do
    url :url
    strategy :github_latest
  end

  app "Tuttle.app"

  zap trash: [
    "~/.tuttle",
  ]
end

For multi-arch support, add on_intel / on_arm stanzas with separate SHA and URL.

CI automation

Add a GitHub Actions workflow (or step in pack-electron.yml) that bumps the cask on each release:

Acceptance criteria

  • Signed + notarized .dmg passes Gatekeeper on a clean Mac
  • brew install --cask tuttle installs the app to /Applications
  • brew uninstall --cask tuttle removes it cleanly
  • Cask auto-updates on new GitHub releases

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions