Files
yellowjacket/packaging/homebrew
yonluandClaude Opus 5 cad3d1339b fix(packaging): put the release recipes on v3's build
Neither packaging/arch/PKGBUILD nor the Homebrew formula had been run
since Phase 1, and both were still calling v2's CLI: `wails3 build`
takes -tags, -obfuscated and -garbleargs and nothing else, so
`-clean -trimpath -ldflags` fails at the flag parser. Both also
installed from build/bin/, which is v2's output path — v3 writes to
bin/, and build/ is tracked build assets now.

Three more things the tree needs that neither recipe had. The tasks
invoke `wails3` by bare name, so scripts/toolbin has to be on PATH or
the build dies at its first sub-task. `wails3 build` has no -ldflags at
all, and build:native computes BUILD_FLAGS in its own vars: so a CLI
variable cannot override it — LDFLAGS_EXTRA is appended inside the
production -ldflags string instead, on linux and darwin alike, empty by
default so make build-dev/build-prod are unchanged. And bundling is a
separate step from building: `task build` produces a bare binary on
both platforms, so the formula's macOS path runs `task package`.

The build assets were the scaffold's, not this app's. Info.plist named
CFBundleExecutable `yjref` and com.example.yjref, nfpm packaged
./bin/yjref, the .desktop template said "A yjref application" — an .app
built from that plist would not have launched. They generate from
build/config.yml, whose info block had never been filled from
wails.json either; `wails3 task common:update:build-assets` is the fix.
nfpm's homepage and license are not derived from it and are set by
hand, which is noted in place, and the refresh regenerates build/ios
and build/android, which this repo does not carry.

arch-package.yml's pacman list moves to webkitgtk-6.0/gtk4 to match the
PKGBUILD's depends(): makepkg installs nothing itself, so a mismatch
fails at link time rather than at check time.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDCbcCZQepnpSQYJ6SxxZm
2026-08-14 23:09:24 -04:00
..

YellowJacket Homebrew formula

The formula builds YellowJacket from source on macOS and Linuxbrew, mirroring the Arch PKGBUILD: the Wails toolchain resolves from go.mod's tool directives and drives the frontend build itself, so the only build inputs are Go, Node, and pnpm.

packaging/homebrew/
└── Formula/
    └── yellowjacket.rb   ← canonical source; CI syncs it to the tap repo

Installing

brew install shadow-puppet/yellowjacket/yellowjacket

shadow-puppet/yellowjacket is Homebrew shorthand for the tap repo github.com/Shadow-Puppet/homebrew-yellowjacket. Brew auto-taps it, so there's no separate brew tap step. To build the tip of main instead of the latest release, add --HEAD.

How publishing works

This directory holds the canonical formula. The tap users install from lives in a separate repo — homebrew-yellowjacket — because Homebrew only discovers formulae from a repo whose name starts with homebrew-, with the formula at a top-level Formula/. Keeping it separate is also why nothing has to live in this repo's root.

On every version tag (v*), .gitea/workflows/homebrew-formula.yml:

  1. downloads the GitHub release tarball for that tag,
  2. computes its sha256,
  3. rewrites the version and sha256 lines in the formula, and
  4. commits the result to homebrew-yellowjacket's Formula/yellowjacket.rb.

So a normal release needs no manual formula edits — tag, and the tap updates itself. (This is the Homebrew equivalent of the Arch package's publish workflow.)

About the sha256

Homebrew re-downloads the source tarball on each install and refuses to build unless its checksum matches sha256 — integrity/tamper detection. The committed value here is a REPLACE_WITH_... placeholder on purpose; the real checksum is computed and injected by CI at release time, so it never has to be maintained by hand. (The Arch PKGBUILD sidesteps this with SKIP because it clones over git rather than downloading a tarball.)

One-time setup

  1. Create the tap repo: Shadow-Puppet/homebrew-yellowjacket on GitHub, with a main branch. It can start empty — the first tagged release seeds Formula/yellowjacket.rb.
  2. Add a CI secret: HOMEBREW_TAP_TOKEN — a GitHub token with write access to that repo (a fine-grained PAT scoped to homebrew-yellowjacket, Contents: read/write, is enough).

That's it. The source repo must be public (or the tap private with an authenticated brew install) for brew to fetch the release tarball.

Notes

  • License: declared as license :cannot_represent (custom license). Replace with the correct SPDX identifier once the license is finalized.
  • macOS vs Linux: under Wails v3 the bundling is a separate step from the build. wails3 task build produces a bare yellowjacket binary in bin/ on both platforms; on macOS the formula runs wails3 task package instead, which wraps that binary in a yellowjacket.app (installed under the Cellar with an exec shim in bin).
  • Linuxbrew: building on Linux additionally needs the system WebKitGTK/GTK stack (webkitgtk-6.0, gtk4, alsa-lib) — OS packages, not Homebrew deps. v2's webkit2gtk-4.1/gtk3 is now only the -tags gtk3 escape hatch. macOS needs only the Xcode Command Line Tools.
  • Cask alternative: if you later ship prebuilt macOS .dmg/.zip artifacts, a Homebrew cask pointing at those installs faster than this source build. This formula is the source-build path.