Release Checklist¶
Use this before cutting the first public release.
Scope¶
The primary release artifact is the native Fyne tray app:
cmd/git-repo-tracker
The headless CLI is built from:
cmd/git-repo-tracker-cli
The GNOME Shell frontend is optional and remains an integration in this repo for now:
integrations/gnome-shell
Local Verification¶
Run the standard gate:
gofmt -w .
go build ./...
go vet ./...
go test ./...
Check docs and optional integration syntax:
node --check integrations/gnome-shell/extension.js
uvx --with mkdocs-material mkdocs build --strict
Build and smoke-check the native app/CLI entrypoints:
task build
go run ./cmd/git-repo-tracker --help
go run ./cmd/git-repo-tracker-cli status --json
Use isolated config/cache paths when testing CLI refreshes:
GIT_REPO_TRACKER_CONFIG=/tmp/grt-cli.yaml \
GIT_REPO_TRACKER_CACHE=/tmp/grt-cli-state.json \
go run ./cmd/git-repo-tracker-cli status --refresh --json
Only run --fetch when you intentionally want network access:
go run ./cmd/git-repo-tracker-cli status --refresh --fetch --json
Release Configuration¶
Validate GoReleaser when it is installed:
goreleaser check
Expected native app build path:
.goreleaser.yaml -> ./cmd/git-repo-tracker
.github/workflows/release.yml -> ./cmd/git-repo-tracker
macOS .app bundle & Homebrew cask¶
GoReleaser (OSS) only builds the universal binary. Building the .app bundle and generating an app Homebrew cask are GoReleaser Pro features, so they are done with a script in .github/workflows/release.yml instead:
build/macos/package-app.sh # wraps the binary in git-repo-tracker.app (LSUIElement)
build/macos/Info.plist # bundle metadata; __VERSION__ substituted at package time
build/macos/icon.icns # app icon (regenerate from icon.png with iconutil)
build/macos/cask.rb.tmpl # the app cask; __VERSION__/__SHA256__ filled in, pushed to the tap
Validate the whole macOS chain locally (no publishing, no tag):
goreleaser release --snapshot --clean # builds the universal binary into ./dist
task bundle # or: build/macos/package-app.sh ... --out dist
open dist/git-repo-tracker.app # confirm it launches as a menu-bar agent (no Dock icon)
Confirm the rendered cask is well-formed with brew style (run it against a copy placed under a tap's Casks/ directory, where the cask RuboCop config applies).
Platform Notes¶
- macOS is the primary native tray experience: left-click opens the rich popover, right-click shows the native repo menu.
- Linux AppIndicator native menus are intentionally limited to outdated repos and Open App. Search, settings and inline detail live in the app window.
- GNOME Shell integration is optional and packaged separately from the native app; it depends on
git-repo-tracker-cli.
Before Tagging¶
- Confirm
README.mdscreenshots render. - Confirm
docs/builds withmkdocs build --strict. - Confirm
config.example.yamlmatches documented config fields. - Confirm
go.modmodule path isgithub.com/laszukdawid/git-repo-tracker. - Confirm
build/macos/icon.icnsis current ificon.pngchanged. - Confirm
dist/git-repo-tracker.applaunches as a menu-bar agent (no Dock icon). - Confirm no generated
site/ordist/output or local binaries are staged.