| Channel | Mechanism | Automatic? |
|---|---|---|
| GitHub Release | GoReleaser via Actions on tag push | Yes |
Homebrew tap (gastownhall/gastown) |
Actions writes an asset-based formula after archives upload | Yes |
| Homebrew core (if listed) | Homebrew bot detects new release | Yes (24-48h delay) |
npm (@gastown/gt) |
Actions workflow, OIDC trusted publishing | Yes (when org is set up) |
Use the release formula, which handles all steps:
gt mol wisp create gastown-release --var version=X.Y.Zcd gastown/mayor/rig
./scripts/bump-version.sh X.Y.Z --commit --tag --push --install- Update CHANGELOG.md
[Unreleased]section - Update
internal/cmd/info.goversionChangesslice - Run
./scripts/bump-version.sh X.Y.Z(updates version.go, package.json, CHANGELOG header) - Commit, tag, push:
git add -A
git commit -m "chore: Bump version to X.Y.Z"
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin main
git push origin vX.Y.Z- Rebuild locally:
make install # builds, codesigns, installs to ~/.local/bin
gt daemon stop && gt daemon startThe release.yml workflow triggers automatically:
- Verify tag matches Version constant — runs
make check-version-tagand aborts the release if the pushed tag (vX.Y.Z) doesn't match theVersionconstant ininternal/cmd/version.go. Prevents recurrence of #3459 where v0.13.0 shipped reporting 0.12.1. - goreleaser job builds binaries for all platforms and creates the GitHub Release
- update-homebrew-formula job writes an asset-based formula to
gastownhall/homebrew-gastownwhen tap credentials are configured - publish-npm job publishes to npm (best-effort,
continue-on-error: true)
Manual dispatch is only for rerunning a release from a v* tag. Publishing jobs are guarded to skip branch refs.
make check-version-tagThe target is a no-op on untagged HEADs, so it's safe to run on any checkout.
It only fails when HEAD is tagged vX.Y.Z and the Version constant doesn't
match. Run it after scripts/bump-version.sh and before pushing the tag if you
want to catch drift before CI does.
The release workflow automatically overwrites Formula/gastown.rb in the gastownhall/homebrew-gastown repo on every tag push. It prefers the GitHub App credentials HOMEBREW_TAP_APP_ID and HOMEBREW_TAP_APP_PRIVATE_KEY, and falls back to HOMEBREW_TAP_TOKEN if present.
The tap formula installs prebuilt release assets:
brew install gastownhall/gastown/gastownThe normal user-facing Homebrew path remains homebrew-core:
brew install gastownIf Gastown is listed in homebrew-core, the formula lives at:
https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/g/gastown.rb
Homebrew's BrewTestBot automatically detects new GitHub releases and opens
a PR to homebrew-core. Gastown is on the autobump list — the bot checks
every ~3 hours.
Gastown is on the autobump list, so brew bump-formula-pr will refuse to
submit a manual PR. If the bot hasn't updated after 6+ hours, check
https://github.com/Homebrew/homebrew-core/pulls?q=gastown for stuck PRs.
brew update
brew info gastown # Check version
brew upgrade gastown # Upgrade if installedThe workflow uses OIDC trusted publishing (npm provenance). No NPM_TOKEN
secret is needed — the id-token: write permission on the job generates a
short-lived OIDC token that npm trusts because the GitHub repo is linked to
the npm package.
The @gastown npm organization must exist and be linked to this repo:
- Go to https://www.npmjs.com and create (or join) the
@gastownorg - Under org settings, enable "Require 2FA" and configure trusted publishing
- Link
gastownhall/gastownas a trusted publisher for@gastown/gt
The @gastown npm org was secured by a community member (Ivan Casco Valero,
ivan@ivancasco.com) to prevent scope squatting. Ownership transfer is pending.
Until the org is transferred, npm publish will fail gracefully without blocking
the release (continue-on-error: true in the workflow).
npm view @gastown/gt version
npm install -g @gastown/gt
gt version| File | What changes |
|---|---|
CHANGELOG.md |
New version section with date |
internal/cmd/info.go |
versionChanges entry for gt info --whats-new |
internal/cmd/version.go |
Version constant |
npm-package/package.json |
version field |
flake.nix |
version + vendorHash (only if nix is in PATH) |
gastownhall/homebrew-gastown/Formula/gastown.rb |
asset URLs + sha256 updated by release workflow |
The workflow rejects go.mod files with replace directives (they break
go install). Remove the replace directive and commit before tagging.
The @gastown npm org doesn't exist or you don't have publish access.
See the npm section above. The release still succeeds — npm is best-effort.
For the gastownhall/gastown tap, check the update-homebrew-formula job and
the tap's Formula/gastown.rb commit history. For homebrew-core, check
https://github.com/Homebrew/homebrew-core/pulls?q=gastown for stuck BrewTestBot
PRs. Manual brew bump-formula-pr is blocked for autobump formulae.
The .beads/ directory has unstaged changes. This is cosmetic — the version
number is correct. The -dirty comes from git describe seeing any unstaged
modifications.
The bump script reads the current version from version.go and replaces it. If version.go was manually edited to a different version, the script's sed pattern won't match. Fix version.go manually and re-run.