查找当前主模块的伪版本



我有一个Go代码生成工具,在构建它作为二进制文件时,我想在构建时使用Go工具为它的主模块注入它自己的当前伪版本。

我知道对于依赖项,我可以使用go list -m allgo list -m -f '{{ .Version }}' $MODULE找到它们的伪版本。主模块的版本号为空。

我知道我可以计算当前的伪版本:

git describe --tags `git rev-list --tags --max-count=1`

:

TZ=UTC git --no-pager show 
--quiet 
--abbrev=12 
--date='format-local:%Y%m%d%H%M%S' 
--format="%cd-%h"

得到合理的近似,如:v0.3.0-20210907161133-495c072cb418

在我有了伪版本之后,我打算在构建时像这样注入它:
go build -ldflags="-X generate.version v0.3.0-20210907161133-495c072cb418" -o mytool ./main.go

然而,建议使用Go工具直接获得当前的伪版本,而不是我在餐巾纸上做的一些拙劣的bash东西。有什么建议吗?

伪版本的问题是,它只是VCS(不只是Git)中特定版本的编码。

并且,它通常在模块没有semver标记时使用,或者当您只需要特定的修订时使用,该修订可以是分支名称。

伪版本可能是指没有可用的语义版本标记的版本。例如,在创建版本标记之前,它们可以用于测试提交。

所以要有一个伪版本,首先你必须引用一个修订. 现在,哪一个修订版最准确地描述了你的项目,这将取决于你。master分支的尖端可能足够好,因此:

go list -f '{{.Version}}' -m example.com/mymodule@master

请注意语法module@version,它允许您选择特定的版本,因此,获得相应的伪版本。

最新更新