用途:为 sidecar 项目发布新版本,把版本打标、依赖同步、变更日志、构建发布与 Homebrew 公式更新串成一条可复现的流程。
主要能力:按 SemVer 决定 major/minor/patch;用 make sync-deps 把 github.com/marcus/* 依赖固定到最新 tag;校验 go.mod 无 replace 指令;更新 CHANGELOG 的 Unreleased 段落;通过 GoReleaser 发布 GitHub Release 与二进制;自动渲染并推送 Homebrew tap 公式。发布前检查由 check-release-state.sh 强制执行,会检查 Go CI 是否通过、工作树是否干净、main 是否与 origin/main 一致,并在不满足时拒绝打标。
使用方式:先满足前置条件(Go 版本匹配 go.mod、工作树干净、CI 绿、GitHub CLI 已认证且有 tap 推送权限、仓库存在 HOMEBREW_TAP_TOKEN)。更新依赖与校验安装路径时使用 GOWORK=off。可选先跑 make release-snapshot、./scripts/verify-release-archives.sh dist、./scripts/test-release-guards.sh dist、./scripts/test-release-publication.sh、make release-dry-run BUMP=minor 做干跑。正式发布用 BUMP=minor make release,或 RELEASE_VERSION=vX.Y.Z make release 指定版本。若 tag 已存在只需补 tap 步骤,用 RELEASE_VERSION=vX.Y.Z make release-tap。发布后可用 gh run list、gh release view 检查,并用临时 GOBIN 加 GOWORK=off go install 验证安装。
适用场景:sidecar 维护者按既定契约发布版本,尤其是需要同步兄弟依赖、更新 Homebrew 公式或恢复中断发布时。
限制:流程依赖 GitHub Actions、GoReleaser 与 Homebrew tap 环境;td/nightshift 公式不会自动升级,需手工编辑;go install 在打标后短时间内可能因校验和数据库返回 500,需等待重试;恢复发布优先发新的 patch 版本并保留已有 tag。具体脚本行为与完整契约见 docs/guides/active/releasing.md。