拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Mojo 开源贡献全流程指南:从 Issue 表明意图到 Nightly 发布的五个阶段

Mojo 开源贡献全流程指南从 Issue 表明意图到 Nightly 发布的五个阶段【免费下载链接】mojoThe Modular Platform (includes MAX Mojo)项目地址: https://gitcode.com/GitHub_Trending/mo/mojo本指南以仓库中的 contribution-process.md 为骨架系统梳理向 Mojo 提交代码贡献的完整流程从确认贡献区域、在 GitHub Issue 中表明意图到制定实现计划、编写测试与代码、通过评审最终经由!sync合入并在 Nightly 版本中发布。读完本文你将掌握 Mojo 社区贡献的准入条件、每个阶段的明确动作与验收标准以及大型变更应走的提案流程proposal-process.md并能在仓库中对应找到每一步的落地证据构建命令、测试命令、标签与机器人注释等。贡献流程概览Mojo 的代码贡献被划分为五个阶段文档 contribution-process.md 依次描述如下阶段目标关键产物 / 动作Stage 1: Prerequisites前置准备确认贡献区域开放并表明意图阅读贡献区域说明创建或认领 GitHub IssueStage 2: Planning规划研究现有实现达成方案共识实现计划implementation planaccepted标签Stage 3: Implementation实现提交带测试的代码测试覆盖PR 描述中写closes #issue-numberStage 4: Review评审社区评审 Modular 团队批准Modular 团队成员批准方可合并Stage 5: Merge and release合并与发布同步进内部 monorepo 并随 Nightly 发布注释!syncmerged externally/merged internally标签整个过程与 Mojo/CONTRIBUTING.md、根目录 CONTRIBUTING.md 相互衔接前者是 Mojo 贡献者的总览入口后者补充了 fork、分支、格式化、评审时效与后台同步机制的细节。阶段 1前置准备确认贡献区域处于开放状态动手实现之前第一步是确认你想改进的代码区域是否开放接收贡献。当前仓库中 contribution-areas.md 明确给出了各区域的开放情况编译器Compiler暂不接收贡献。源码开放可读、可构建、可提 Issue但在贡献流程成熟前不接受针对编译器的 Pull Request标准库Standard library目前接收的变更类型包括——带测试/基准复现的良好文档化 Bug 修复、不牺牲可读性与可维护性且附带基准的性能改进、标准库文档改进、测试覆盖改进、将测试从FileCheck迁移到testing模块的assert_*函数、以及安全问题修复明确不接收的类型包括无测试的代码尤其是核心原语、破坏既有 API 或隐式行为语义的变更、为冷门平台增加支持、向代码库添加依赖、大范围格式化或重构、未经提案流程新增整个模块等。如果贡献属于标准库后续的开发细节构建、测试、风格见 stdlib-development.md 与 stdlib-code-style.md。通过 Issue 表明意图确保存在一个描述你打算修复的 Bug 或新增功能的 GitHub Issue。这向其他贡献者传递了这项工作已有人在做的信号避免重复劳动。具体要求创建新 Issue 前先搜索既有 Issue避免重复开 Issue 时遵循 issue-pr-etiquette.md 中的约定。根目录 CONTRIBUTING.md 对什么样的变更可以不先开 Issue给出了更细的界定小且明显的修复文档/注释中的拼写与语法错误、一两行且有明确根因和清晰测试的 Bug 修复、局部文档澄清可以直接提 PR除此之外——新 API、重构、性能工作、行为变更、触碰公共接口、或超过约 100 行的改动——都建议先开 Issue 沟通。拿不准时就先开 Issue。阶段 2规划研究现有实现Mojo 团队认为开源软件开发带来的学习机会很有价值建议花时间理解你要修复内容相关的既有代码。文档特别注明可以使用 AI 辅助研究代码库但在你打开 PR 时应能够在无人辅助的情况下与团队就你所提议的变更展开设计层面的讨论。这也与仓库根目录 AI_TOOL_POLICY.md 以及 issue-pr-etiquette.md 中所有输出都必须供人类消费你对输出全权负责的要求一脉相承。制定并发布实现计划一旦有了解决方案的思路团队强烈建议在 GitHub Issue 上发布实现计划发布计划给了他人评论的机会在投入具体实现前就设计达成共识在高层面评审和调整一个计划远比评审一个完成品实现要省时。Modular 团队在方案达成一致时会给 Issue 打上accepted标签表示我们已准备好接收对应的 PR。[!NOTE] 你可以在 Issue 被标记accepted之前就提交 PR。但如果你的变更是非平凡non-trivial的且关联 Issue 尚未被接受该 PR 被评审或批准的可能性会显著降低。根目录 CONTRIBUTING.md 进一步说明了维护者的响应机制维护者会通过添加accepted标签或留言给出可以开始的信号如果你提交了非平凡 PR 却没有关联已获批准的 Issue团队可能请你暂停 PR 并先补 Issue以便对齐方案——这不是拒绝而是为了让你的工作在评审中落地而不是停滞。阶段 3实现为变更编写测试文档对实现方式本身不做规定We arent prescriptive about how you arrive at your changes但有两条硬性要求请为新增或修改的代码提供合理覆盖的测试。没有测试的 PR 极不可能被合并如果不确定如何测试可以在 PR 中直接说明例如 I have not added tests, not sure how to test this capability团队会乐意与你协作。对于标准库stdlib-development.md 给出了对应的落地命令# 构建标准库 ./bazelw build //Mojo/stdlib/... # 运行标准库全部测试 ./bazelw test //Mojo/stdlib/test/... # 只跑某个子目录的测试 ./bazelw test //Mojo/stdlib/test/math/... # 列出所有测试目标 ./bazelw query tests(//Mojo/stdlib/...)测试构建时断言是开启的编译参数带-D ASSERTall会激活标准库中所有debug_assert因此一个在 release 构建中被跳过的断言也可能导致测试失败个别测试文件通过其BUILD.bazel中的_DISABLED_ASSERTIONS列表选择退出。另外如果本地安装了pixi可以直接用pixi run tests ./stdlib/test/bit/test_bit.mojo运行标准库测试该脚本会自动执行等价的 bazelw 命令。对每一行代码负责并在 PR 中关联 Issue打开 PR 时你应当准备好在技术上全权负责提交的每一行代码以及 PR 描述本身详细约定见 issue-pr-etiquette.md在 PR 描述正文中加上closes #issue-number便于维护者一眼看出该 PR 关联的 GitHub Issue。结合 issue-pr-etiquette.md 中的协作纪律实现阶段还应遵守新贡献者最多同时打开2 个并发 PR每个 PR 尽量小打开 PR 时检查 GitHub 显示的修改行数超过 100 行尽量拆分为多个 PR可独立则更佳不要为了变小而删掉测试或 docstring。小 PR 带来的好处包括更高质量的评审、更快的整体评审、避免有效变更被阻塞、更少的合并冲突以及支持评审并行处理。提交前格式化与本地验证根目录 CONTRIBUTING.md 要求变更在提交前完成格式化否则 CI 的 lint/格式化检查会失败。仓库根目录的bazelw包装脚本见 bazel/docs/usage.md 了解仓库的 Bazel 用法提供了格式化入口./bazelw run format建议安装pre-commit钩子让每次提交自动格式化pixi x pre-commit install如果在 GitHub UI 上提交导致钩子未生效可手动执行pixi x pre-commit run --all-files。提交前还应运行受影响区域的测试、在改动涉及共享基础设施时跑更广的回归测试并以维护者的视角审阅自己的 diff。阶段 4评审评审过程被视为一种交互式学习的绝佳方式任何有见地的人都可以评审 PR社区成员的 constructive review 受到积极鼓励评审过程中请保持耐心并遵守 issue-pr-etiquette.md社区评审中的参与要求包括全程以真人身份出席在线互动、假定善意assume positive intent、所有输出代码、注释、实现计划、评论都必须简洁清晰、能够为 diff 中的每一行辩护——即使错误来自 AI责任也在你自身。[!IMPORTANT]任何 PR 合并进代码库之前都必须获得 Modular 团队成员的批准。关于评审时效根目录 CONTRIBUTING.md 给出了明确的承诺存在高贡献量、维护者休假等例外情况PR 首次评审提交后 3 周内给出首次评审或反馈通常可能更快后续评审贡献者回应反馈后通常在 5 个工作日内复审新 Issue提交后 10 天内完成标记与确认提案Proposal团队在提交后 6 周内完成评审与讨论。阶段 5合并与发布这是 Mojo 特有的外部仓库 内部 monorepo双轨合并机制。当 PR 获得批准后Modular 团队成员在 PR 上注释!sync该 Issue 被打上merged externally标签modular/modular上的 PR 被关闭一个对应的 PR 在 Modular 的内部 monorepo 中打开通过内部 CI 后合并合并后添加merged internally标签你的提交随下一个 nightly 版本出现在modular/modular上。根目录 CONTRIBUTING.md 的 Behind the scenes 部分补充了这一机制的实现细节可与上述流程相互印证仓库使用Copybara工具在内部与外部仓库之间同步变更你会看到名为 Modularbot 的机器人评论 PR 状态Synced internally变更已同步进内部仓库、Merged internally已在内部仓库合并、Merged externally已随最新 nightly 上线到main分支你的 GitHub 用户名与 PR 号通过提交元数据保留例如ORIGINAL_AUTHOR...、PUBLIC_PR_LINK...本仓库几乎每天在 ET 时间约凌晨 2 点与内部仓库同步一次因此main分支可能比内部仓库滞后最多约 24 小时阻塞性发布失败时可能更久合并后的变更通常会在合并后一两天内出现在下一个 nightly 构建或文档站点中。大型变更走提案流程如果你的变更不在 contribution-areas.md 所列的我们接受的变更范围内即属于重大变更第一步应当是提交书面提案proposal。根据 proposal-process.md一份提案就是一个向仓库proposals/目录新增文档的 GitHub PR——仓库中已存在大量历史提案如value-ownership.md、pattern-matching.md、enums.md等可作为格式参考按 contribution-process.md 打开提案 PR并在讨论中遵循 issue-pr-etiquette.md提案由 Mojo 标准库负责人leads裁决负责人批准、所有阻塞性问题已决定、相关决定已纳入后提案 PR 即可合并若被推迟或拒绝负责评审的 lead 会说明原因并关闭 PR提案评审比普通代码变更耗时更长团队目标是在提交后 6 周内完成评审与讨论。提案流程的价值在于让最广泛的社区成员有机会反馈同时作为过去提案及其决策理由的审计日志。相关文档导航围绕贡献流程仓库 Mojo/docs/contributing/ 下还有以下配套文档可按需深入contribution-areas.md哪些代码区域接收贡献、各区域接收哪些类型的变更issue-pr-etiquette.mdIssue/PR 互动规范、AI 辅助贡献规则与 PR 大小要求proposal-process.md重大变更的提案流程与裁决机制stdlib-development.md标准库开发环境搭建、构建与测试stdlib-code-style.md 与 docstring-style-guide.md标准库代码风格与 API 文档docstring写作规范compiler/README.md编译器贡献文档入口指向 WorkingInOSRepo.md、testing.md 等编译器的构建、测试与调试资料根目录 CONTRIBUTING.mdfork、分支、PR 创建、评审时效与后台同步机制的全流程细节以及 CODE_OF_CONDUCT.md 与 AI_TOOL_POLICY.md 两项必须事先阅读的规范。一句话总结先确认 contribution-areas.md 中你的目标区域开放与否通过 Issue 表明意图并与维护者达成accepted共识然后带测试地实现小而有质量的 PR遵守评审纪律最终你的代码将以!sync为起点经由内部 monorepo 的 CI 校验后随下一个 nightly 与所有 Mojo 用户见面。【免费下载链接】mojoThe Modular Platform (includes MAX Mojo)项目地址: https://gitcode.com/GitHub_Trending/mo/mojo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门