第62节 对日志的处理 — 自动生成 CHANGELOG
❤️💕💕记录sealos开源项目的学习过程。k8s,docker和云原生的学习。Myblog:http://nsddd.top
[TOC]
why
首先,先谈一谈为什么需要 CHANGELOG:
我们在上一节说明了如何设计 Release,那么在这里,我们谈一谈如何针对每一次的 Release 设计优秀的 CHANGELOG。
一个项目最好有 CHANGELOG 用来展示每个版本之间的变更内容,作为 Release Note
的一部分。但是,如果每次都要手动编写 CHANGELOG,会很麻烦,也不容易坚持,所以这里我们可以借助git-chglogopen in new window
版本号
我们知道一个 release 需要一个版本号,即使在贡献者文档有一个体系的 版本号设计方案,但是依旧让我们不满意,如果靠开发者手动打版本号,工作效率低不说,经常还会出现漏打、打的版本号不规范等问题。所以最好的办法是,版本号也通过工具自动生成。采用了gsemveropen in new window工具来自动生成版本号。
我们可以编写一个脚本,来控制 整个 项目的版本号
scripts/ensure_tag.sh
:
version=v`gsemver bump`
if [ -z "`git tag -l $version`" ];then
git tag -a -m "release version $version" $version
fi
在 scripts/ensure_tag.sh
脚本中,通过 gsemver bump
命令来自动化生成语义化的版本号,并执行 git tag -a
给仓库打上版本号标签,gsemver 命令会根据 Commit Message 自动生成版本号。
之后,Makefile 和 Shell 脚本用到的所有版本号均统一使用scripts/make-rules/common.mk
文件中的 VERSION 变量:
VERSION := $(shell git describe --tags --always --match='v*')
或者是:
❯ echo $(git describe --tags --always --match='v*')
v2.3.3-630-gb11bc2f7
❯ echo $(git describe --abbrev=0 --dirty --always --tags | sed 's/-/./g')
v2.3.3.dirty
上述的 Shell 命令通过 git describe 来获取离当前提交最近的 tag(版本号)。
在执行 git describe
时,如果符合条件的 tag 指向最新提交,则只显示 tag 的名字,否则会有相关的后缀,来描述该 tag 之后有多少次提交,以及最新的提交 commit id
。例如:
$ git describe --tags --always --match='v*'
v1.0.0-3-g1909e47
这里解释下版本号中各字符的含义:
3
:表示自打tag v1.0.0
以来有 3 次提交。g1909e47
:g
为 git 的缩写,在多种管理工具并存的环境中很有用处。1909e47
:7
位字符表示为最新提交的 commit id 前 7 位。
最后解释下参数:
–tags
,使用所有的标签,而不是只使用带注释的标签(annotated tag)。git tag
生成一个 unannotated tag,git tag -a<tagname>
-m<massage>
'' 生成一个 annotated tag。–always
,如果仓库没有可用的标签,那么使用 commit 缩写来替代标签。–match
,只考虑与给定模式相匹配的标签。
保持行为的一致性
手动操作:
检查 IAM 的所有 Commit 是否符合 Angular Commit Message 规范:
go-gitlint
也可以通过以下命令,手动来生成 CHANGELOG:
git-chglog v1.0.0 CHANGELOG/CHANGELOG-1.0.0.md
还可以执行 gsemver 来生成版本号:
gsemver bump
我们应该注意的是:
这里要强调的是,我们要保证不管使用手动操作,还是通过 Makefile 操作,都要确保 git commit message 规范检查结果、生成的 CHANGELOG、生成的版本号是一致的。这需要我们采用同一种操作方式。
git chglog
CHANGELOG生成器在Go(Golang)中实现。随时随地,写你的更新日志。
git-chglog
在内部使用 git
命令获取要包含在CHANGELOG中的数据。基本步骤如下。
- 获取到所有的标签 tag
- 获取包含在
tagA
和tagB
之间的提交。 - 使用与步骤1和2中指定的标记查询对应的所有标记执行。
快速开始
git-chglog
需要配置文件和模板来生成CHANGELOG。
但是,从头开始创建配置文件和模板是浪费时间。
因此,我们建议使用 --init
选项,它将以交互方式创建它们 👍
然后我们就创建好了模板和配置文件。
接下来,我们就可以快速的生成让我们项目的CHANGELOG。通过执行以下简单命令,您的CHANGELOG的Markdown将显示在stdout上。
git-chglog
如果你想输出到一个文件而不是stdout,使用 -o
( --output
)选项。
由于我的配置文件在 CHANGELOG/
目录下面:
git-chglog --config CHANGELOG/.chglog/config.yml -o CHANGELOG/CHANGELOG-0.0.0.md
使用帮助
直接 git-chglog --help
就好了
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©