如果您计划添加、更改或移除面向用户的功能,或者对 Bazel 进行 重大架构更改,则必须 先编写设计文档并让其通过审核,然后才能提交更改。
以下是一些重大更改的示例:
- 添加或删除原生构建规则
- 对原生规则进行重大更改
- 对原生构建规则语义进行更改,这些更改会影响多个规则的行为
- 更改 Bazel 的规则定义 API
- 更改 Bazel 用于连接到其他系统的 API
- 更改 Starlark 语言、语义或 API
- 可能会对 Bazel 性能或内存用量产生广泛影响的更改(无论好坏)
- 更改广泛使用的内部 API
- 更改标志和命令行界面。
进行设计审核的原因
编写设计文档时,您可以与其他 Bazel 开发者协调,并向 Bazel 核心团队寻求指导。例如,当提案添加、 移除或修改 BUILD、MODULE.bazel 或 bzl 文件中提供的任何函数或对象时,请将 Starlark 团队添加为审核者。 设计文档会在提交前接受审核,因为:
- Bazel 是一个非常复杂的系统;看似无害的本地更改可能会产生重大的全局影响。
- 该团队会收到许多用户的功能请求;此类请求不仅需要评估技术可行性,还需要评估相对于其他功能请求的重要性。
- Bazel 功能通常由核心团队以外的人员实现;此类贡献者的 Bazel 专业知识水平差异很大。
- Bazel 团队本身的专业知识水平也各不相同;没有一个团队成员完全了解 Bazel 的各个方面。
- 对 Bazel 的更改必须考虑向后兼容性,并避免重大更改。
Bazel 的设计审核政策有助于最大限度地确保:
- 所有功能请求都经过了基本的审核。
- 在投入到可能无法正常运行的实现之前,合适的人员会对设计进行评估。
如需帮助您入门,请查看 Bazel 提案代码库中的设计文档。 设计是正在进行的工作,因此实现细节可能会随着时间的推移和反馈而变化。已发布的设计文档捕获的是初始设计,而不是设计实现过程中的持续更改。 如需了解当前 Bazel 功能的说明,请始终参阅文档。
贡献者工作流
作为贡献者,您可以编写设计文档、发送 pull 请求并为您的提案请求审核者。
编写设计文档
所有设计文档都必须包含一个标头,其中包含:
- 作者
- 上次重大更改的日期
- 审核者列表,包括一位(且仅一位) 主要审核者
- 当前状态(草稿、审核中、已批准、已拒绝、 正在实现、已实现)
- 指向讨论串的链接( 将在公告发布后添加)
该文档可以编写为 全球可读的 Google 文档 或 使用 Markdown 编写。如需了解 Markdown / Google 文档的比较,请阅读下文。
对用户可见的提案必须包含一个部分,用于记录对向后兼容性的影响(以及在需要时制定推出计划)。
创建 Pull 请求
通过创建拉取请求 (PR) 将文档添加到 设计索引,从而共享您的设计文档。将 Markdown 文件或文档链接添加到您的 PR。
如果可以,请选择一位主要审核者。 并抄送给其他审核者。如果您未选择主要审核者,Bazel 维护人员会将一位主要审核者分配给您的 PR。
创建 PR 后,审核者可以在代码审核期间发表初步评论。例如,主要审核者可以建议添加其他审核者,或指出缺少的信息。当主要审核者认为可以开始审核流程时,他们会批准 PR。这并不意味着提案是完美的或将被批准;而是意味着提案包含足够的信息来开始讨论。
公布新提案
提交 PR 后,向 bazel-dev 发送公告。
您可以抄送给其他群组(例如, bazel-discuss, 以获取 Bazel 最终用户的反馈)。
与审核者迭代
任何感兴趣的人都可以对您的提案发表评论。尝试回答问题、阐明提案并解决疑虑。
讨论应在公告串中进行。如果提案位于 Google 文档中,则可以改用评论(请注意,允许匿名评论)。
更新状态
迭代完成后,创建一个新的 PR 来更新提案的状态。将 PR 发送给同一位主要审核者,并抄送给其他审核者。
如需正式接受提案,主要审核者会在确保其他审核者同意该决定后批准 PR。
从首次公告到提案获批之间必须至少间隔 1 周。这可确保用户有足够的时间阅读文档并分享他们的疑虑。
在提案被接受之前,可以开始实现,例如作为概念验证或实验。但是,在审核完成之前,您无法提交更改。
选择主要审核者
主要审核者应是领域专家,并且:
- 了解相关子系统
- 客观公正,能够提供建设性反馈
- 在整个审核期间都可以领导该流程
不妨查看各种团队 标签的联系人。
Markdown 与 Google 文档
您可以自行决定哪种方式最适合您,因为这两种方式都是可以接受的。
使用 Google 文档的优势:
- 非常适合集思广益,因为上手简单。
- 协作编辑。
- 快速迭代。
- 轻松提出修改建议。
使用 Markdown 文件的优势:
- 用于链接的简洁网址。
- 明确的修订记录。
- 不会忘记在公开链接之前设置访问权限。
- 搜索引擎可以轻松搜索。
- 面向未来:纯文本不受任何特定工具的限制,也不需要互联网连接。
- 即使作者不在,也可以更新。
- 可以自动处理(更新/检测失效链接、提取作者列表等)。
您可以选择先在 Google 文档上进行迭代,然后将其转换为 Markdown 以供日后使用。
使用 Google 文档
为保持一致性,请使用 Bazel 设计文档模板。 它包含必要的标头,并与其他 Bazel 相关文档保持视觉一致性。如需执行此操作,请依次点击文件 > 复制 ,或点击此链接复制设计文档 模板。
如需让全世界都能阅读您的文档,请依次点击 共享 > 高级 > 更改…,然后 选择“开启 - 拥有链接的任何人”。如果您允许对文档发表评论,则任何人都可以匿名发表评论,即使没有 Google 账号也可以。
使用 Markdown
文档存储在 GitHub 上,并使用 GitHub 风格的 Markdown (规范)。
创建 PR 以更新现有文档。重大更改应由文档审核者审核。细微更改(例如错别字、格式)可以由任何人批准。
审核者工作流
审核者负责评论、审核和批准设计文档。
审核者的一般职责
您负责审核设计文档、在需要时请求提供其他信息,以及批准通过审核流程的设计。
收到新提案时
- 快速浏览文档。
- 如果缺少关键信息,或者设计不符合项目的目标,请发表评论。
- 建议添加其他审核者。
- 在 PR 准备好接受审核时批准该 PR。
在审核过程中
- 与设计作者就存在问题或需要澄清的问题进行对话。
- 如果合适,邀请应了解该设计的非审核者发表评论。
- 确定作者必须解决哪些评论,才能获得批准。
- 如果您对提案的当前状态感到满意,请在讨论串中写下“LGTM”(Looks Good To Me,我看着不错)。
对所有设计审核请求执行此流程。如果设计不在 设计索引中,请勿批准影响 Bazel 的设计 。
主要审核者的职责
您负责就待处理设计的实现做出“通过”/“不通过”的决定。如果您无法做到这一点,则应确定合适的代理(将 PR 重新分配给代理),或将 bug 重新分配给 Bazel 管理员以进行进一步处理。
在审核过程中
- 确保评论和设计迭代流程以建设性的方式向前推进。
- 在批准之前,确保其他审核者提出的疑虑已得到解决。
所有审核者批准后
- 确保自邮件列表中的公告发布以来至少已过去 1 周。
- 确保 PR 更新了状态。
- 批准提案作者发送的 PR。
拒绝设计
- 确保 PR 作者发送 PR;或向他们发送 PR。
- PR 会更新文档的状态。
- 向文档添加评论,说明为什么无法批准当前状态的设计,并概述后续步骤(如果有)(例如“重新审视无效假设并重新提交”)。