Apache Beam Committer 工作指南:PR 评审、LGTM 审批与合并的完整规范
大数据批处理流处理数据工程【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam4/beam点击查看免费下载本篇基于 Beam 仓库中的 committer-guide.md 系统讲解 Apache Beam 官方 Committer 在代码评审与合并环节的操作规范评审目标与提交粒度要求、LGTM 审批机制、CLA 检查、合并前的 CI 测试验证以及提交历史整理和合并提交信息的书写方式。读完本文你可以完整掌握一个 Beam 变更从评审通过到合入主干的全流程要点并能对照仓库中的 CI 工作流配置验证每一项规定的实际落地方式。PR 评审目标与变更粒度要求Beam 的评审流程Pull request review有明确的五大目标这些目标共同决定了评审意见的尺度评审迭代要高效、及时、高质量避免微小到没有上下文的碎片改动也避免大杂烩式的巨型变更mega-change支持高效的代码创作不要为了一个极小的改动让作者长时间等待评审GitHub 上很难把评审按顺序堆叠进行也不要因为改动难以评审而阻塞重要变更降低首次贡献的门槛鼓励贡献者遵循 Beam 的贡献指南但 Committer 可以主动为新人多承担一些额外工作PR 与提交信息要形成清晰的变更历史让每一处改动的目的和来源可追溯保证可以按需做细粒度回滚官方文档同时指向了 Beam 的 post-commit 处理策略。在变更粒度Granularity of changes上指南给出五条具体约定偏好小的、相互独立的、增量式的 PR且每个 commit 是一个清晰、单一的变更descriptive, isolated commits允许为代码中不同的逻辑部分保留独立的 commit前提是这样做能让评审和日后回顾更容易保持 commit 相互隔离是好实践——作者应当能够在评审人要求时相对容易地把 PR 拆分成更小的提交一般而言每个 commit 都应当能编译并通过测试不要在历史中保留纯格式化提交如 checkstyle、spotless 的修复这类 commit 应与前一个 commit 压缩squash合并。第 5 条可以直接对应到仓库中的实际工具Beam 仓库为 Java 代码启用了 Spotless 格式化任务CI 中也存在独立的Spotless工作流见 .github/workflows/README.md 中列出的 PreCommit Spotless 任务。从源码结构看正是由于 CI 会自动检查格式指南才要求把格式化 commit 与逻辑变更 squash 在一起——否则历史里会混入大量无语义的格式提交。必须走到 LGTMLooks good to me!经过多轮评审与修改后PR 达到可合并状态。评审人通过 GitHub 的 approval 按钮或诸如 Looks good to me!LGTM的评论来表达认可。审批规则区分两种作者身份作者不是 Committer必须由一名 Committer 来批准该变更作者是 Committer其选定的评审人的认可即可。Committer 被信任能够选择合适的评审人即使该评审人本身不是 Committer。一旦 PR 被批准任何 Committer 都可以执行合并。指南同时给出两类重要补充说明例外情形跳过某些规则的情形很少需要逐案处理case-by-case。例如主分支构建失败、阻塞所有代码贡献时Committer 可以行使裁量权——但即便如此仍然应当为 PR 寻求评审。评审过程中常见的缩写是 TBRto be reviewed待评审。始终走 PR哪怕不等评审这是指南中强调最重的一条。Committer 永远不应绕过 pull request 直接提交代码即使是紧急修复或因构建失败而触发的回滚。原因有三跳过 PR 会绕过测试覆盖可能导致构建失败或无法修复故障PR 机制保证变更被正确传达即使合并之后他人仍有机会发现潜在缺陷或提出改进。合并大型贡献前确认 CLA合并较大的贡献larger contribution之前Committer 需要确认该贡献者在 Apache 秘书处的记录中已签署ICLAIndividual Contributor License Agreement个人贡献者许可协议。指南提供了两类查询入口Committer 名单以及已签署 ICLA 但尚不是 Committer的人员名单均为 Apache 基金会官方页面。对于较小的贡献则不要求ICLA此时依据的是 Apache License 2.0 第五条——该条款规定了故意提交的贡献的许可方式即贡献者提交代码的行为本身即构成许可声明。合并前必须确认 CI 测试通过指南的 Tests 章节规定合并前请确认 CI 测试在 GitHub PR 页面上显示通过只要存在测试失败就不应合并该 PR原文以 Jenkins 名义表述而根据仓库现状Beam 的 CI 已从 Jenkins 全面迁移至 GitHub Actions见下文。如果 PR 中的改动需要额外的测试覆盖可以请求运行扩展测试套件指南给出了两个典型例子若 PR 修改了某个 runner可运行完整的ValidatesRunner套件例如评论Run Spark ValidatesRunner触发 Spark 的 ValidatesRunner可通过Run Java PostCommit运行 examples 与部分 IO 集成测试。这两条触发方式在当前仓库中都有明确的配置依据。Beam 的 CI.md 说明了 CI 环境执行环境为 GitHub Actions按命名约定分为自托管 runner 工作流beam_*.yml含 PreCommit、PostCommit、LoadTest、PerformanceTest 及基础设施任务和 GitHub 托管 runner 工作流。在 .github/workflows/README.md 的任务清单中可以逐一找到这些任务评论触发PreCommit 及支持 trigger phrase 的任务例如 Spark ValidatesRunner 工作流 .github/workflows/beam_PostCommit_Java_ValidatesRunner_Spark.yml 中通过 matrix 声明了触发短语job_phrase: [Run Spark ValidatesRunner]其if条件中包含github.event.comment.body Run Spark ValidatesRunner——这正是指南中在 PR 下评论即可触发扩展测试的实现机制PostCommit 任务的文件触发机制PostCommit 任务如beam_PostCommit_Java.json对应的 PostCommit Java 任务通常不在 PR 上自动触发而是通过修改工作流paths中声明的触发文件如.github/trigger_files/下的 JSON 文件来触发——在 beam_PostCommit_Java_ValidatesRunner_Spark.yml 中可以看到paths: [release/trigger_all_tests.json, .github/trigger_files/beam_PostCommit_Java_ValidatesRunner_Spark.json]的声明。从这一结构可以推断指南所提Run Java PostCommit类的扩展运行最终落到 PostCommit 工作流时就是通过这类 trigger file 机制执行的。因此作为 Committer 在合并前确认测试通过时需要区分两类检查PR 上自动触发的 PreCommit/单元构建检查绿色即可以及按需通过评论或触发文件补跑的 ValidatesRunner 等扩展套件修改 runner 时必做。收尾整理提交历史Finishing touches当代码本身已经完成、但 PR 里堆积了一批评审过程中产生、没有保留价值的提交时评审人应先给出 LGTM然后要求作者对提交做 rebase、squash 或 split使历史最有价值。指南给出五条整理原则优先让每个 commit 只做一件事。commit 是容易回滚的最小单位回滚很多个 commit 或整个 PR 都比较容易但回滚一个 commit 的一部分比较困难提交信息要有描述性并引用所解决的 issue 编号——日后不应需要通过翻找 merge commit 或 PR 的第一个 commit 才能弄清某处改动的原因PR 描述中应包含被解决 issue 的链接更新CHANGES.md值得注意的变更如新特性、向后不兼容的变更、依赖变更等都要写进去仓库根目录的 CHANGES.md 即此文件的实际位置。Beam 的开发者指南还提供了一个实用命令更新后用./gradlew formatChanges保证CHANGES.md的章节顺序与格式符合模板见 code-change-guide.md 的附录把评审迭代产生的 Fixup!、Address comments 类 commit 压缩掉。执行合并合并方式与 Merge Commit 信息指南指出虽然更推荐作者在评审完成后自行压缩提交但也存在由 Committer 代劳更实际的情形例如要做的操作显而易见、或作者无法及时响应。此时 Committer 可以使用 GitHub 的 Squash and merge 选项或以其他方式修改 PR 中的提交。责任归属明确Committer 最终负责trust the committers judgment信任 Committer 的判断。所有测试通过后PR 页面底部会出现绿色的合并按钮。选择规则是除非你想在合并时顺带压缩提交见上一节否则应选择Merge pull request并在下拉框中确认选中的是Create a merge commit。这会保留提交历史并添加一个 merge commit——因此务必确认提交历史已经按上一节的要求整理妥当。不要使用 GitHub 默认的 merge commit 信息。默认格式形如Merge pull request #1234 from some_user/transient_branch_name [BEAM-7873] Fix the foo bizzle bazzle正确做法是把改动标题并入主题行subject lineMerge pull request #1234: [BEAM-7873] Fix the foo bizzle bazzle注意两个细节issue 编号如[BEAM-7873]紧跟在 PR 号之后位于主题行内from some_user/transient_branch_name这种临时分支名不保留它是无意义的噪音。如果你还有补充说明应写在提交信息的正文body中而不是主题行里。这样保证了指南开头强调的目标——pull request 和 commit messages 建立有目的、有来源的清晰历史——在最终落库的 merge commit 上同样成立。Committer 操作核对清单把上述规范浓缩成合并前的检查清单检查项依据PR 拆分粒度合理每个 commit 单一变更、可编译可测试变更粒度章节格式化类 commit 已 squash 进前一个 commit变更粒度章节非 Committer 作者的 PR 已由 Committer 批准LGTM 章节大型贡献已确认 ICLACLA 章节PR 页面 CI 检查全部通过修改 runner 时已补跑 ValidatesRunner 等扩展套件测试章节commit 信息含描述与 issue 编号PR 描述含 issue 链接收尾章节CHANGES.md已更新建议执行./gradlew formatChanges校验格式收尾章节 code-change-guide.mdFixup! 类 commit 已压缩收尾章节合并方式选择了 Merge pull request Create a merge commit且 merge commit 主题为Merge pull request #N: [BEAM-xxxx] ...形式合并章节以上全部流程均以 contributor-docs/committer-guide.md 为原始规范来源CI 相关的触发短语与触发文件机制可在 CI.md 与 .github/workflows/README.md 中进一步核对每个任务的名称、matrix 与 cron 配置。赞分享大数据批处理流处理数据工程【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam4/beam点击查看免费下载相关推荐Apache Beam 贡献者开发指南从本地环境搭建到 PR 评审合并Apache Beam 贡献者开发指南从本地环境搭建到 PR 评审合并 Apache Beam 是一个统一的批流一体Batch Streaming数据大数据批处理流处理数据工程Thunderbird for Android 代码审查指南PR 作者与审查者的完整协作规范Thunderbird for Android 代码审查指南PR 作者与审查者的完整协作规范 本文是基于 Thunderbird for Android前身移动开发企业应用Wand-Enhancer 使用教程十分钟完成 WeMod 本地补丁全流程Wand Enhancer 使用教程十分钟完成 WeMod 本地补丁全流程 周六早上你还窝在被子里刷游戏。加载界面刚好三分钟你顺手想给当前训练器多开几个开桌面应用前端上一篇rEFInd Theme Regular图标自定义教程添加新操作系统图标只需5步下一篇终极微服务监控指南APM工具选型与性能优化实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考