发布 Go Module
执行步骤
1. 检查 Git 工作区
- •运行
git status --porcelain检查工作区是否干净 - •如果有未提交的变更或未跟踪文件,显示状态并询问用户是否继续(如果用户选择取消则终止)
2. 检查版本 Tag
- •从
version.go读取VERSION常量获取版本号 - •检查对应的 git tag 是否已存在(
git tag -l <version>) - •如果 tag 已存在,提示用户并终止发布
3. 运行质量检查
- •执行
gofmt -l .,如果有未格式化文件则输出并终止 - •执行
go vet ./...,如果有警告则输出并终止 - •执行
go test -gcflags="all=-N -l" ./...,如果失败则输出失败信息并终止
4. 检查增量代码覆盖率
- •获取最近 tag 作为基线
- •获取变更的 Go 模块目录:
git diff <baseline-tag>..HEAD --name-only | grep '\.go$' | xargs -I {} dirname {} | sort -u - •对每个变更模块运行覆盖率:
go test -gcflags="all=-N -l" -coverprofile=coverage.out ./<module>/... - •如果增量覆盖率 < 60%,输出低覆盖模块并终止
5. 检查 go.mod 一致性
- •运行
go mod tidy - •检查
go.mod和go.sum是否有变更(git diff --name-only) - •如果有变更,提示用户 go.mod 不一致并终止
6. 检查 README 版本号一致性
- •读取
README.md更新日志的最新版本号 - •与
version.go中的版本号比较 - •如果不一致,提示用户并终止
7. 确认发布
- •使用
AskUserQuestion显示以下信息并询问用户是否确认:- •版本号
- •变更的模块列表
- •最近的 commit 摘要
8. 创建 Tag 并推送
- •创建 annotated tag:
git tag -a <version> -m "<version>" - •推送 tag:
git push origin <version> - •推送分支:
git push origin <current-branch>
9. 触发 pkg.go.dev 索引
- •运行
GOPROXY=https://proxy.golang.org GO111MODULE=on go list -m github.com/xiaoshicae/xone/v2@<version>触发模块索引 - •如果命令失败,提示用户手动访问 pkg.go.dev 页面
10. 创建 GitHub Release
- •运行
gh release create <version> --title "<version>" --generate-notes创建 Release - •自动根据 PR 和 commit 生成变更说明
- •如果失败(如 tag 已有 Release),提示用户并继续
11. 输出结果
- •显示发布成功信息
- •输出 pkg.go.dev 链接:
https://pkg.go.dev/github.com/xiaoshicae/xone/v2@<version> - •输出 GitHub Release 链接:
https://github.com/xiaoshicae/xone/releases/tag/<version>
用法
code
/publish # 执行完整发布流程