RPM 中 VCS 版本存储在哪里?

RPM 中 VCS 版本存储在哪里?

我们使用 Git 作为 VCS 和 RPM 进行打包。我想存储构建包的 Git 哈希,但我不知道最合适的地方。

有许多标签可用于 RPM,但是我没有看到任何适用于 VCS 版本(也许浏览了一下?)。

我很怀疑添加自定义标签,只看 50,000 英尺的高度。

一个感觉相当 hack 的解决方案是把 Git hash 放在描述字段。目前我们还没有将它用于其他用途,但是哇,这感觉太丑了。

那么,在 RPM 中存储 VCS 版本最合适的位置是哪里?

答案1

Fedora(很少有 RHEL)将此信息放在 Release 标签中

例如:

Name:           mypackage
Version:        0.0.1
Release:        20140114git0abcdef

答案2

RPM 实际上有一个记录不全的VCS标签。

它似乎没有任何关于其使用的指南,但它存在并且受到支持。

cat > test.spec <<'__END__'
Name: foo
Version: 1
Summary: foo
License: None
Release: 1
VCS: git:repo=my-repo:branch=my-branch:sha=1234deadbeef

%description
foo
__END__


$ rpmspec -q test.spec --qf "%{VCS}\n"
git:repo=my-repo:branch=my-branch:sha=1234deadbeef

它似乎仅限于单个解析标记。仍然有用。我没有找到任何关于其明确定义的格式或结构的文档,并且它的采用有限。在我的 Fedora 32 系统上,我发现两个软件包使用它,格式不同:

$ rpm -qa --qf '%{Name} %{VCS}\n' |grep -v '(none)'
bcache-tools https://github.com/g2p/bcache-tools.git
libcue scm:git:https://github.com/lipnitsk/libcue.git
$

坦白说,rpm 不提供注入自定义标签信息的功能,这真是太可惜了。我想记录 Jenkins 构建 ID 和作业名称、git 提交哈希以及 git 分支或标签,但实际上并不想将它们放在变更日志中。

我可以使用X-BS-foo标签在 debs 中执行此操作。


您可以使用 查看允许的 rpm 标签列表rpm --querytags

标签DISTURL似乎是保留作其他用途但可能是候选人。

还有URL;您可以选择在那里嵌入 SCM 信息,并且如果浏览器访问则将 URL 重定向到合理的位置。


您可能会看到对支持自定义标签的“rpm5”的引用。这似乎是 rpm 的一个死分支,而不是大多数主要发行版使用的 rpm.org 发行版。

答案3

我认为没有什么可以阻止您将所有必需信息存储在 docs 目录中的 VERSION 文件中。该文件的路径可以添加到 VCS 标记中(尽管我还没有测试过)。

相关内容