Rpm-packaging/ReviewGuidelines
目的
使用模板而非 SPEC 的主要目标是灵活性和统一性。模板采用 Jinja2 格式创建。
这意味着使用一种方式创建的模板,经过 renderspec 工具处理后,将适用于所有支持的 Linux 发行版(SUSE、Fedora、CentOS)。
工具集
openstack-macros - 子项目,允许添加或替换 SPEC 模板中使用的必需 RPM 宏。
pymod2pkg - 用于将 Python 源代码名称(即 PyPI 名称)转换为 Linux 包名称的项目。
renderspec - 主要工具,用于将 SPEC 模板转换为 SPEC 文件。 文档
分支工作流程
- 当前工作
所有工作必须在特定项目的 master 分支中完成。
- 回溯/Cherry-pick
在必要时,先前提议到 master 分支的更改可以 cherry-pick 到 stable 分支。
- 回溯/cherry-pick 的情况
- 引入一个新包,如果其元数据对于 master 和 stable 都是有效的
- 运行时和构建时依赖项的数量没有差异
- master 和 stable 之间的版本没有差异
- 存在更改,这些更改正在修复特定包的 %install 或 %files 部分
在其他情况下,应该将更新提议到需要更新的特定分支!
通用规则
Head
- 组:
设置包的正确组是必需的。
- Source0:
Source0 必须指向现有的 tarball 位置,即使 URL 是使用宏构造的。
示例
Group: Development/Libraries Source0: https://pypi.python.org/packages/source/o/%{sname}/%{sname}-%{version}.tar.gz
文档
对于 *-doc 包,应指定一个额外的部分,其中描述了 doc 包的所有元数据。
BuildRequires: - 仅填充文档构建所需的项目。
在必要时,请使用 %bcond_with docs!
示例
%if %{with docs}
%package doc
....
%endif
%if %{with docs}
%files doc
...
%endif
测试
有用但非强制性。所有单元测试指令必须设置在 %check 部分下。
所有测试所需的项目应在模板的顶部指定为 BuildRequires:。
在必要时,请使用 %bcond_with test!
示例
%if %{with test}
BuildRequires: required for test projects
....
%endif
%if %{with test}
%check
...
%endif
版本更新
在更新现有包的版本时,请始终在提交消息中添加以下行
Depends-On: <change ID>
其中 <change ID> 是 openstack/requirements 仓库中更新包版本的评审的更改 ID。通过这样做,我们可以确保在成为 upper-constraints.txt 文件的一部分之前,不会更新任何版本。
请参阅 https://review.openstack.org/393121 以获取示例。
其他重要事项!
在 SPEC 模板中,每个包的 %files 部分下
- %doc 部分不应包含:HACKING*、CONTRIBUTING* 和 AUTHORS
- 如果源代码中存在 LICENCE 文件,则应指定 %license 部分