提交拉取请求
更改 Bevy
大多数更改不需要太多“流程”。如果您的更改比较简单,只需执行以下操作
- 社区成员(就是您!)创建以下内容之一
- 其他社区成员会以随机的方式进行评审和评论。积极的主题专家可以使用
@mentions
被拉入主题。如果您的 PR 已经沉默了一段时间并且准备进行评审,请随时留言“bump”主题,或者在 Discord 的相应引擎开发频道中提出。 - 一旦他们对拉取请求(设计、代码质量、文档、测试)感到满意,单个评审人员就会留下“批准”评审。
- 达成共识后(有关更多信息,请参阅 评审拉取请求)并且 CI 通过,将添加 S-Ready-For-Final-Review 标签。
- 当他们有时间时,项目负责人或维护者将执行最终代码评审并排队 PR 以供合并。
复杂更改
个人贡献者经常领导主要的全新功能和重构。但是,这些更改需要更多设计工作和审查。像这样的复杂更改倾向于经历以下生命周期
- 识别需求或机会并创建一个问题,概述一般问题。
- 根据需要,在该问题主题、交叉链接的 GitHub 讨论 主题或 Discord 的引擎开发频道中进一步讨论此问题。
- 创建草案拉取请求或 RFC。如 RFC 仓库 中所述,复杂的功能需要 RFC,但这些 RFC 可以先于或后于原型工作开始提交。
- 如果可行,可以将独立工作的部分(即使它们只有在合并了完整的复杂更改后才有用)拆分为单独的 PR,以使它们更容易评审。
- 整个社区帮助改进草案 PR 和/或 RFC,留下评论、提出建议并向原始分支提交拉取请求。
- 一旦 RFC 合并或草案拉取请求从草案模式过渡,上一节中概述的正常更改流程 就可以开始。
贡献代码
Bevy 积极地开放社区成员的代码贡献。如果您是 Bevy 的新手,以下是我们使用的流程
在 GitHub 上为
bevyengine/bevy
仓库创建分支。如果您还没有 GitHub 帐户,则需要创建一个。- 将
.cargo/config_fast_builds.toml
复制到.cargo/config.toml
。然后更新文件并遵循一般建议 使用性能优化进行编译。
- 将
在本地克隆的分支中进行更改,通常在自己的新分支中。
- 尝试将您的工作拆分为单独的提交,每个提交都有一个明确的目的。在响应评审时尤其要注意这一点,这样可以很容易地看到发生了哪些更改。
要在本地测试 CI 验证,请运行
cargo run -p ci
命令。这将运行 CI 中发生的大多数检查,但可能需要一些时间。您也可以根据您正在贡献的内容运行子命令以更快地迭代cargo run -p ci -- lints
- 运行格式化和 Clippy。cargo run -p ci -- test
- 运行测试。cargo run -p ci -- doc
- 运行文档测试和文档检查。cargo run -p ci -- compile
- 检查所有必须编译的内容仍然可以编译(示例和基准),以及我们希望确保不能编译的内容(crates/bevy_ecs/compile_fail
)。- 要获取有关可用命令和运行内容的更多信息,请查看 tools/ci 箱。
使用 Markdown(
.md
)文件时,Bevy 的 CI 将使用 markdownlint 检查 Markdown 文件(如本文件)。要在本地使用与我们的 CI 相同的工作流程对您的文件进行 lint- 安装 markdownlint-cli。
- 在 Bevy 项目的根目录中运行
markdownlint -f -c .github/linters/.markdown-lint.yml .
。
使用 TOML(
.toml
)文件时,Bevy 的 CI 将使用 taplo 检查其样式和正确性:taplo fmt --check --diff
- 如果您使用 VSCode,请安装 Even Better TOML 并格式化您的文件。
- 如果您想使用 CLI 工具,请安装 taplo-cli 并运行
taplo fmt --check --diff
以检查格式。通过在 Bevy 项目的根目录中运行taplo fmt
来修复任何问题。
检查是否有错别字。Bevy 的 CI 将使用 typos 检查错别字。
- 如果您使用 VSCode,请安装 Typos Spell Checker。
- 您也可以通过安装 typos-cli 并运行
typos
来检查错别字,并通过运行typos -w
来修复它们,从而使用 CLI 工具。
将您的更改推送到您在 GitHub 上的分支并打开拉取请求。
响应任何 CI 故障或评审反馈。虽然必须修复 CI 故障才能合并您的 PR,但您不必同意评审中的所有反馈,只需确认已收到反馈即可。如果您无法达成一致,请保持主题打开并服从维护者或项目负责人的最终判断。
当您的 PR 准备合并时,维护者或项目负责人将对其进行评审并建议最终更改。如果这些更改很小,他们甚至可以直接应用它们以加快合并速度。
如果您最终将新的官方 Bevy 箱添加到 bevy
仓库中
- 将新箱添加到 tools/publish.sh 文件中。
- 检查是否添加了新的 cargo 功能,根据需要更新 docs/cargo_features.md。
贡献时,请
- 优先考虑小的 PR,这些 PR 可以逐步改进。
- 解释您在做什么以及为什么这样做。
- 尝试松散地遵循 更改 Bevy 中的工作流程。
- 参考 样式指南 来帮助保持我们的代码库整洁。
- 使用文档注释记录新代码。
- 包含清晰简单的测试。
- 在添加新的面向用户的功能时添加或改进示例。
- 将工作分解成易于消化的部分。
- 请求您需要的任何帮助!
您的第一个 PR 将很快合并!
无论您如何提供帮助,感谢您为 Bevy 做出的贡献!
样式指南
一般指南
- 优先考虑使用细粒度的导入,而不是像
bevy_ecs::prelude::*
这样的全局导入。 - 使用一致的注释样式
///
文档注释应位于#[derive(Trait)]
调用之上。//
注释通常应位于相关行之上,而不是内联。- 避免使用
/* */
块注释,即使是在编写长注释时也是如此。 - 在注释中使用
variable_name
代码块来表示您正在引用特定类型和变量。 - 以大写字母开头注释。如果它们是句子式的,请在末尾加点。
- 使用注释来组织无法合理地重构为单独函数的冗长且复杂的代码段。
- 使用 Bevy 错误代码 时,在返回的错误消息
... See: https://bevy.rust-lang.net.cn/learn/errors/b0003
中包含指向 Bevy 网站上相关错误的链接。
Rust API 指南
作为 API 开发的参考,我们使用 Rust API 指南。通常情况下,应遵循这些指南,但以下几个方面我们不赞同
不一致之处
在 Rust API 指南 中提到的某些方面我们并不赞同。这些方面将在我们发现其他不赞同的地方进行扩展,因此请确保定期查看它们。
所有项目都有 rustdoc 示例
- 此指南过于严格,并不适用于 Bevy 游戏引擎中的所有内容。对于需要更多上下文或需要更具交互性的演示(例如渲染或输入功能)的功能,请改用
examples
文件夹。
示例使用 ?,而不是 try!,也不是 unwrap
- 此指南通常是合理的,但并非始终要求。
只有智能指针实现 Deref 和 DerefMut
- 通常这是一个很好的经验法则,但我们可能会故意违反它来使用单元素包装类型,例如
Life(u32)
。行为仍然是可预测的,并且它显着提高了人体工程学/新用户的理解。
接收和回复评审
一旦您创建了 Pull Request (PR),您的下一步任务就是引导它通过社区审核,以便最终合并。理想情况下,社区成员应该很快就会审核您的工作,但有时 PR 会被遗漏。如果您的 PR 已经存在了几周,但没有人关注,请不要犹豫,在 Discord 上请求审核。
您可能会发现,您的审阅者有时会误解您的工作,要求您进行您不同意的更改,或者要求您进行您不想进行的额外更改。如果您发现自己不同意审阅者,可以礼貌地说“不”,或者表明他们的建议最好留待后续 PR 进行。
采用拉取请求
有时,Pull Request 的作者会变得忙碌或失去响应,或者项目成员未能及时回复。这是任何开源项目中自然的一部分。为了避免阻碍这些工作,这些 Pull Request 可以被“接管”,即另一个贡献者创建具有相同内容的新 Pull Request。如果有一个没有更新的旧 Pull Request,请评论组织是否适合添加“S-Adopt-Me”标签,以表明它可以被“接管”。“S-Adopt-Me”的 PR 应该被关闭,并使用相同的标签打开一个跟踪问题来跟踪它们的接管。
如果您打算自己接管一个 PR,请在跟踪问题中说明。对于尚未标记为开放接管的 PR,您也可以在 PR 上留下评论,询问作者是否计划返回。如果作者同意或在几天后没有回复,那么就可以接管它。由于此时 PR 已经被您接管,因此有时甚至可以跳过标签过程。
添加了这个标签后,最佳实践是派生原始作者的分支。这确保他们仍然因为工作而获得认可,并且保留了提交历史。当新的 Pull Request 准备就绪时,它应该在描述中引用原始 PR。然后,通知组织成员关闭原始 PR。
- 例如,您可以通过在您的 PR 描述中添加以下内容来引用原始 PR:
Adopted #number-original-pull-request
帮助 PR 准备就绪
在不完全接管 PR 的情况下,有时作者需要帮助才能获得批准或通过 CI。这些 PR 可以被标记为“S-Needs-Help”,并且欢迎在它们上打开 PR 来修复最后几个点,解决冲突以通过 CI。您需要与原始作者或维护者之一密切合作,将您的提交添加到原始 PR 中。