审查指南

审查指南

审查收件箱

Gerrit 发布审查收件箱

通用审查注意事项

在查看任何给定的审查时,您需要记住一些不同的事项

  • 我们处于发布周期中的哪个阶段? 一些规则会根据我们所处的阶段而变化。

  • 正在发布的可交付成果遵循哪种“发布模型”? 发布模型为版本号和计划设置了一些通用规则。

  • 发布在哪个分支上?

与这些问题相关的许多规则都由验证作业强制执行,因此,当您看到错误时,理解规则有助于您理解错误消息。

审批策略

我优先考虑最新的系列,因为大多数开发工作都将发生在该系列中。

对于稳定系列,我们与 stable-maint-core 团队达成协议,如果可交付成果具有 stable:follows-policy 标签,我们不会在他们有机会审查之前批准它(通常是在请求提交后的周一)。对于没有该治理标签的可交付成果的发布,可以随时批准。

来自 master 的发布可以由单个审查者批准。

代码更改、文档更改和其他类似更改需要 2 个审查者。

来自 PTL 或发布联络人以外人员的发布必须由其中一人通过 Gerrit 中的 +1 投票确认。

审查检查

提交消息是否包含可交付成果的名称和版本号? 如果请求包含多个可交付成果,可以包含团队名称和日期。

通常不允许在稳定分支上添加新的可交付成果文件。 仅在当前系列的生命周期内或仅用于 EOL 标记目的时才允许添加新的可交付成果。

验证报告

验证作业 openstack-tox-validate 应用可以自动化的验证规则。 它在 tox/validate-request-results.log 中生成文本报告。 该文件包含如果您运行 tox -e validate 命令时会看到的输出。

输出是根据正在执行的规则组织的。

我们已经尝试将“调试”输出分离出来,以便更容易地浏览真实内容,并将重要输出左对齐。

警告和错误在文件的底部进行了总结。

列表更改报告

releases-tox-list-changes 作业生成文本报告以支持人工审查员。 它将报告写入 tox/list-changes-results.log。 与验证作业一样,它可以作为 tox -e list-changes 在本地运行。

审查员应阅读此日志文件以进行每次审查。 它包含评估发布所需的所有信息。 列表更改报告有多个部分需要您审查。

发布模型

在文件的顶部,我们获得发布模型,它告诉我们诸如何时允许发布、允许哪些版本号等信息。

团队详情

“团队详情”部分告诉我们 PTL 和联络人,因此我们知道谁必须确认请求。 如果其中一个人提出了补丁,我们可以立即进行。 否则,我们希望确保其中一个人了解发布并批准它,以便团队知道我们不会发布他们知道存在问题的项目,例如。

标签

接下来,报告显示仓库的治理标签。 如果请求是稳定分支上的发布,并且项目具有该 stable:follows-policy 标签,将显示一个大型横幅,说明该发布需要由稳定团队批准。 即使可交付成果具有该标签,来自 master 的发布也不会包含该横幅。

接收新标签 X.Y.Z 的提交的详细信息

在“接收新标签…的提交的详细信息”部分(DEBUG 行下方),报告显示 git 认为之前的标签和应添加的补丁数量是多少。 这是一种快速验证我们没有在 1.9.0 之后标记 1.8.0 或类似情况的方法。

检查现有标签

下一部分显示已在正在标记的提交上存在的任何其他标签。 有时,一个团队会有 3 部分的可交付成果,但只有一个部分在发布中发生变化。 如果他们将这 3 个部分定义为 1 个可交付成果,他们应该标记所有 3 个部分。

包含版本号的所有分支

下一部分显示所有分支上的版本。 这有些重要,因为在从 master 创建稳定分支后的第一个发布中,我们希望确保版本号在前进。 验证作业要求至少版本号中的 Y 值递增。

包含提交的分支

下一步显示包含提交的哪个分支。 这对于确保没有人将 2 个分支合并在一起,并且我们没有从错误的分支发布很有用。

对于当前周期,发布应始终来自 master 分支。 稳定发布应来自适当的稳定分支。

与 HEAD 的关系

“与 HEAD 的关系”部分告诉我们发布是否会跳过任何提交。有时,有人在本地使用早于分支上最新提交的提交哈希。如果此部分没有说明正在发布 HEAD(Request releases from HEAD),那么最好要求提交者验证他们是否在执行他们想要执行的操作。有时他们不想发布额外的更改,有时他们不知道这些更改。对于里程碑标签,没有必要采取这种额外的预防措施,因为它们是基于日期的,并且即使它们不包含所有内容也没关系。我们预计在里程碑截止日期前后会有大量的变更和进展。

开放补丁、文档补丁和包含发布说明的补丁

接下来的几个部分显示匹配各种标准的开放补丁。这些在发布候选阶段的周期接近时很有用。当接近冻结日期时,发布团队可能会鼓励团队在发布之前批准未决的更改,以更新需求、发布说明和翻译。

需求变更

接下来的两个部分,“需求变更…”和“setup.cfg 变更…”,显示了自上次标记以来项目所做的依赖项更改。我们使用这些来确保 SemVer 规则的例外情况得到应用

  • 标记常规发布(而不是像 alpha、beta 或 rc 这样的“预发布”)的项目需要在依赖项的最小版本发生更改或添加新依赖项时增加其版本号的 Y 部分。

该报告显示需求变更部分中的测试需求变更。这些不会触发 Y 版本变更。

发布 X.Y.Z 将包含

“发布 $version 将包含”部分显示了新发布中包含的实际更改——自上次标记版本以来的差异。审查的客观性就在这里。如果正在标记一个补丁发布,并且列表中的某项内容看起来像一个新功能,我们希望他们标记一个次要更新。如果列表中的任何内容似乎描述了一个不向后兼容的更改,我们希望他们标记一个主要版本更新。

git log 部分提供了日志消息的更详细视图。查找类似“删除类 X”或“将参数 Y 添加到方法 B”的注释,以指示发布将不向后兼容。如果发布没有新功能并且只修复了一个错误,则没有必要降低版本号。有时,如果只有一个更改并且显然是一个错误修复,我们可能会要求他们这样做,但大多数时候发布包含修复和功能的混合。

另一件事是查看是否只有 CI 配置更改。如果唯一的更改是 zuul 或 tox 配置,则没有理由标记发布,因为最终用户不会看到这些更改。这有时会发生在准备发布提案的脚本的项目中。

输出的下一部分(在 Release Notes 之后)显示了将出现在发布公告电子邮件中的相同文本。它包含在内,以便如果构建该文本失败,此作业将失败,并且可以修复 reno 输入文件,而不是让公告作业失败。

$PROJECT 的用户

输出的最后一部分是列表中包含当前交付版本的一个依赖项的项目列表。在冻结期间,该部分对于评估延迟发布的影响很有用。

发布作业

提交发布请求时,将触发 check-release-approval 作业,以检查发布请求是否已获得 PTL 或发布联络人的批准。

发布请求合并后,tag-releases 作业将在 release-post 管道中启动。

tag-releases 从发布仓库读取文件,并将标签添加到交付文件中提到的仓库中。

添加标签会触发另一个作业,该作业实际构建发布并上传它。

上传 Python 包发布后,作业 propose-update-constraints 会向 openstack/requirements 提交更改,以更新 upper-constraints.txt 列表。约束列表与实际需求列表一起使用,以告诉作业安装哪些包的哪些版本。由于我们维护该列表,因此每次发布受约束的内容时,我们都希望确保更新该值。该作业适用于所有 python 包,但并非所有包都在约束列表中,因此有时它不会提交补丁。

发布作业失败

发布作业失败时,消息会发送到发布失败邮件列表:http://lists.openstack.org/cgi-bin/mailman/listinfo/release-job-failures

发布批准状态

根据经历的作业失败类型,可能需要停止我们所有的发布批准。

确实,有时作业失败是系统性的,应该首先修复,以避免重复失败,这可能导致我们协调发布中的不一致状态。

为了回答这种情况,我们定义了三种状态来指示我们是否应该/不应该继续验证补丁

  • RED:不再批准;

  • ORANGE:一种临时状态,我们认为问题已解决,但批准首先必须仔细监控;

  • GREEN:问题已解决,一切正常。(重新开放批准)。

为了通知所有发布经理出现问题并要求他们暂停批准,请按照以下流程操作

  1. 在 ML 上打开一个新主题,主题为 [release] Status: RED - $subject,以指示该问题

  2. 直接通过 IRC(#openstack-release)通知发布经理

当您认为问题已解决但仍需要进行一些测试时,只需通过将主题从 RED 移动到 ORANGE 来回复该主题即可。

当一切似乎都在控制之下时,您可以回复该主题,将主题从 ORANGE 移动到 GREEN

Creative Commons Attribution 3.0 License

除非另有说明,本文档根据知识共享署名3.0许可协议授权。请参阅所有OpenStack法律文件