设计文档

报告问题 查看源代码

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

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

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

设计审核原因

在编写设计文档时,您可以与其他 Bazel 开发者协作,并向 Bazel 的核心团队寻求指导。例如,当提案添加、移除或修改 BUILD、WORKSPACE 或 bzl 文件中提供的任何函数或对象时,请将 Starlark 团队添加为审核者。 提交设计文档之前,我们会先对其进行审核,原因如下:

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

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

  • 所有功能请求都会经过基准审查。
  • 在投资于可能无用的实现之前,合适的人员会先权衡设计。

为帮助您开始使用,请查看 Bazel 提案代码库中的设计文档。设计正在进行中,因此实现细节可能会随时间而变化并收到反馈。已发布的设计文档捕获的是初始设计,而不是在实现设计后发生的持续变化。请务必参阅相关文档,了解当前 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 相关文档保持视觉一致性。为此,请依次点击 File > Make a copy,或点击此链接制作 Design 文档模板的副本

如需让所有人都能读取您的文档,请依次点击共享 > 高级 > 更改...,然后选择“开启 - 知道链接的任何人”。如果您允许对文档发表评论,则任何人都可以匿名发表评论,即使没有 Google 帐号也无妨。

使用 Markdown

文档存储在 GitHub 上,并使用 GitHub 的 Markdown 变种规范)。

创建 PR 以更新现有文档。重大变更应由文档审核人员审核。任何人都能够批准细微更改(例如拼写错误、格式设置)。

审核人员工作流程

审核者对设计文档发表评论、进行审核和批准。

审核员的一般职责

您负责审核设计文档,根据需要提供更多信息,并批准通过审核流程的设计。

当您收到新提案时

  1. 快速浏览文档。
  2. 如果缺少关键信息,或者设计与项目目标不符,请添加注释。
  3. 建议其他审核者。
  4. 在 PR 准备好接受审核后批准它。

在审核流程中

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

对于所有设计审核请求,请按照此流程操作。如果影响 Bazel 的设计不在设计索引中,请勿批准。

首席审核员的职责

您负责决定待处理设计的实现。如果您无法做到这一点,则应确定合适的受托人(将 PR 重新分配给受托人),或者将 bug 重新分配给 Bazel 经理进行进一步处理。

在审核流程中

  1. 确保评论和设计迭代过程以建设性的方式推进。
  2. 在获得批准之前,请确保其他审核者的疑虑已解决。

经过所有审核者的批准

  1. 请确保邮寄列表上的通知至少已过了一周。
  2. 确保 PR 会更新状态。
  3. 批准提案作者发送的 PR。

拒绝设计

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