设计文档

报告问题 查看源代码 每夜 build · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

如果您打算添加、更改或移除面向用户的功能,或者对 Bazel 进行重大架构更改,则必须编写设计文档并进行审核,然后才能提交更改。

以下是一些重大变更示例:

  • 添加或删除原生 build 规则
  • 对原生规则的破坏性更改
  • 对原生 build 规则语义所做的更改,会影响多条规则的行为
  • Bazel 规则定义 API 的变更
  • Bazel 用于连接到其他系统的 API 的变更
  • Starlark 语言、语义或 API 的更改
  • 可能会对 Bazel 性能或内存用量产生广泛影响的更改(无论是好是坏)
  • 对广泛使用的内部 API 的更改
  • 更改了标志和命令行界面。

设计审核的原因

编写设计文档时,您可以与其他 Bazel 开发者协调,并向 Bazel 核心团队寻求指导。例如,如果提案添加、移除或修改了 BUILD、MODULE.bazel 或 bzl 文件中提供的任何函数或对象,请将 Starlark 团队添加为审核者。设计文档在提交前会接受审核,原因如下:

  • Bazel 是一个非常复杂的系统;看似无害的本地更改可能会产生重大的全局影响。
  • 该团队会收到来自用户的许多功能请求;在评估这些请求时,不仅要考虑技术可行性,还要考虑相对于其他功能请求的重要性。
  • Bazel 功能通常由核心团队之外的人员实现;此类贡献者的 Bazel 专业知识水平差异很大。
  • Bazel 团队本身的专业知识水平不尽相同;没有任何一位团队成员能完全了解 Bazel 的方方面面。
  • 对 Bazel 所做的更改必须考虑向后兼容性,并避免破坏性更改。

Bazel 的设计审核政策有助于最大限度提高以下可能性:

  • 我们会对所有功能请求进行基本审核。
  • 在投入可能行不通的实现之前,合适的人员会对设计提出意见。

为帮助您上手,请查看 Bazel Proposals Repository 中的设计文档。设计仍在完善中,因此实现细节可能会随时间推移和反馈而发生变化。已发布的设计文档记录了初始设计,而非在设计实施过程中发生的持续变化。请务必参阅文档,了解当前 Bazel 功能的说明。

贡献者工作流程

作为贡献者,您可以撰写设计文档、发送拉取请求,并为您的提案请求审核员。

编写设计文档

所有设计文档都必须包含标题,其中包含:

  • 作者
  • 上次重大更改的日期
  • 审核员列表,其中包括一位(且仅一位)主审核员
  • 当前状态(草稿审核中已批准已拒绝正在实施已实施
  • 讨论会话链接(将在公告发布后添加

文档可以编写为可供所有人访问的 Google 文档,也可以使用 Markdown 编写。请参阅下文,了解 Markdown 与 Google 文档的对比

对用户有明显影响的提案必须包含一个部分,其中记录对向后兼容性的影响(以及必要时发布计划)。

创建拉取请求

创建一个拉取请求 (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 以更新现有文档。重大更改应由文档审核员审核。任何人都可以批准琐碎的更改(例如拼写错误、格式错误)。

审核者工作流程

审核人员对设计文档进行评论、审核和批准。

一般审核员的责任

您负责审核设计文档、根据需要索要更多信息,以及批准通过审核流程的设计。

收到新提案时

  1. 快速浏览一下该文档。
  2. 如果缺少重要信息,或者设计不符合项目目标,请提供相关意见。
  3. 建议其他审核人员。
  4. 当 PR 准备好送审时,请批准该 PR。

审核流程

  1. 与设计作者就存在问题或需要澄清的问题进行对话。
  2. 在适当情况下,邀请应该了解该设计的非审核人员提供反馈。
  3. 确定作者必须解决哪些评论才能获得批准。
  4. 如果您对提案的当前状态满意,请在讨论会话中写入“LGTM”(Looks Good To Me,即“看起来不错”)。

请针对所有设计审核请求遵循此流程。如果影响 Bazel 的设计不在设计索引中,请勿批准。

主审核员的责任

您负责就是否实施待处理的设计做出决策。如果您无法执行此操作,则应指定合适的代理(将 PR 重新分配给代理),或将 bug 重新分配给 Bazel 管理员以供进一步处理。

审核流程

  1. 确保以建设性的方式推进评论和设计迭代流程。
  2. 在获得批准之前,请确保已解决其他审核员提出的问题。

在所有审核者都批准后

  1. 请确保在邮寄名单中发布通知后至少已过 1 周。
  2. 确保 PR 会更新状态。
  3. 批准提案作者发送的 PR。

拒绝设计

  1. 确保 PR 作者发送 PR;或者向他们发送 PR。
  2. PR 会更新文档的状态。
  3. 在文档中添加一条注释,说明设计在当前状态下无法获得批准的原因,并概述后续步骤(如果有,例如“重新审视无效的假设并重新提交”)。