go tool - 快速生成CHANGELOG.md
前言
在git项目中,通过添加CHANGELOG.md可以展示项目的版本更新记录,方便用户查看项目的重大bug修复或不兼容版本信息。
本文介绍一个 changelog 工具,使用git命令获取git repository中的所有tags和commits log,生成CHANGELOG.md。
一、使用方法
安装:
1 | go install github.com/xpunch/changelog |
打开项目目录运行
1 | changelog |
或者通过命令行指定项目目录
1 | changelog --source ~/gitrepo --output ~/gitrepo/CHANGELOG.md --fetch --verbose |
二、代码实现
1、调用git命令
1 2 3 4 5 6 7 8 | func git(dir string, args ...string) (string, error) { cmd := exec.Command( "git" , args...) var out bytes.Buffer cmd.Stdout = &out cmd.Dir = dir err := cmd.Run() return out.String(), err } |
通过exec调用git命令,并传入参数,需要本地git命令可以运行,并拥有repository的访问权限。
2、拉取最新的repository
1 | git fetch --all |
更新本地仓储的tags和commits,保证生成的CHANGELOG.md是基于最新的提交记录。
3、获取tags
1 | git tag -n -l -- sort =creatordate -- format %(refname:short);%(creatordate:short);%(subject) |
通过上面的命令可以获取所有的tag信息。
4、获取tag间提交记录生成
1 | git log --no-merges -- format =oneline tagA..tagB |
通过上面的命令可以获取两个tag间的提交记录。
5、整合获取的git信息,生成CHANGELOG.md
使用 github.com/hashicorp/go-version 比较版本号大小,并重新排序。
1 2 3 4 5 6 7 8 9 10 11 | sort.Slice(records, func (i, j int) bool { s, t := records[i].Version, records[j].Version vs, err := version.NewVersion(s) if err != nil { return s < t } vt, err := version.NewVersion(t) if err != nil {<br> return s < t } return vs.LessThan(vt) }) |
根据提交信息前缀简单分为Features和Bug Fixes
1 2 3 4 5 6 7 8 9 10 11 | if strings.HasPrefix(msg, "[fix]" ) { records[i].BugFixes = append(records[i].BugFixes, strings.TrimSpace(strings.TrimPrefix(msg, "[fix]" ))) } else if strings.HasPrefix(msg, "[feat]" ) { records[i].Features = append(records[i].Features, strings.TrimSpace(strings.TrimPrefix(msg, "[feat]" ))) } else if strings.HasPrefix(msg, "[feature]" ) { records[i].Features = append(records[i].Features, strings.TrimSpace(strings.TrimPrefix(msg, "[feature]" ))) } else if strings.Contains(msg, "fix" ) { records[i].BugFixes = append(records[i].BugFixes, msg) } else { records[i].Features = append(records[i].Features, msg) } |
最终效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 1.1.0 (2022/01/17) ### Features - separate features and bug fixes disable fetch by deafult ### Bug Fixes - fixing first tag not have commit logs issue # 1.0.0 (2022/01/14) ### Features - support create changelog.md from git repository - Initial commit |
总结
本文介绍了如何使用go调用git命令,利用git相关命令获取历史提交记录,并生成CHANGELOG.md文件。
CHANGELO格式只是我根据自己的理解定义的,如果需要自定义格式,可以fork代码自行修改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律