Go 项目制品构建与发布
goreleaser 从 git tag 触发,交叉编译多平台二进制、生成压缩包和校验和,并发布到 GitHub Release、Homebrew 等渠道。配置集中在 .goreleaser.yml。
goreleaser init
goreleaser check
goreleaser build --snapshot --clean
goreleaser release --snapshot --clean
goreleaser release --clean
goreleaser release --skip=publish --clean
goreleaser changelog
最小配置:
version: 2
builds:
- id: app
main: ./cmd/app
binary: app
env: [CGO_ENABLED=0]
goos: [linux, darwin, windows]
goarch: [amd64, arm64]
ldflags:
- -s -w -X main.version={{.Version}}
archives:
- formats: [tar.gz]
format_overrides:
- goos: windows
formats: [zip]
checksum:
name_template: checksums.txt
--snapshot 不发布,只生成带快照版本号的产物;先用它验证配置。GITHUB_TOKEN 权限不足会导致上传失败;CI 里要显式给 contents: write。CGO_ENABLED=0 才能稳定交叉编译;依赖 cgo 的项目需要额外工具链。version: 2)和 goreleaser 版本要匹配;旧配置可能被拒绝。mod_timestamp。go — 构建与测试git — 打 taggithub-actions — CI 发布