Clojure

工作流

任务如何成为提交

此页面描述了任务(错误和增强请求)如何通过 JIRA 任务系统最终成为 Clojure、ClojureScript 和 ClojureCLR 的一部分的总体工作流。

此处描述的总体过程有以下几个目标

  • 维护 Clojure 质量

  • 解决对用户很重要的错误

  • 让社区参与最适合 Clojure 的工作

该流程中有多个组参与其中,并且责任等级不断增加

  • 任何人 - 只要您创建了 Clojure JIRA 帐户,任何人都可以向 Clojure 提交错误或增强请求

  • 贡献者 - 任何已签署贡献者协议的人都可以提供补丁或致力于改进任务

  • 筛选人员 - 较少数量的受信任个人已被授予将任务移至(某些)流程阶段(尤其是分类和筛选活动)的能力

  • BDFL - Rich Hickey 是 Clojure 的创建者和仁慈的终身独裁者。Stuart Halloway 也享有特殊级别的访问权限,并且通常会将补丁提交给 Clojure。

任务字段

任务中包含多个重要字段,这些字段共同确定了其在以下工作流程中的“状态”。需要了解的一些关键字段

  • JIRA 状态 - 这些控制默认的 JIRA 工作流并包含“打开”、“进行中”、“重新打开”、“已解决”、“已关闭”

    • Clojure 工作流实际上除了常规的打开/关闭差别外几乎没有将这些区分开来

  • 审批 - 一个自定义字段,主要是审阅人员如何更改工单的状态

    • 无 - 新工单

    • 已分类 - 审阅人员已审批工单,认为值得处理

    • 已预审 - 审阅人员已审批工单并审阅补丁准备接受审查

    • 已审核 - 审阅人员和 Rich 已审批工单,认为值得处理

    • 已审阅 - 审阅人员已审批工单的补丁准备接受 Rich 审查

    • 不完整 - 审阅人员已请求对工单或补丁进行改进

    • 确定 - Rich 已审批工单准备纳入

  • 补丁 - 限定附加的补丁类型

    • 无 - 没有补丁

    • 代码 - 仅代码,没有测试

    • 代码和测试 - 代码和测试

  • 修复版本

    • 发布 X.X - 具体目标版本

    • 积压 - 将在未来发布中考虑

  • 解决 - 当工单关闭时,它将会有一个解决方法

    • 拒绝 - 未接受工单进行处理

    • 重复

    • 已完成

    • 未解决

工作流

下图记录了用于工单如何通过系统的方式的过程。圆角框表示工作流中的状态。它们有明确定义的条件(有时涵盖多个字段),以便这些状态中的每一个都可以有一个报表。通常,单行状态表示审批状态。如果采用其他字段,则它们会列在该状态之后。

彩色块表示不同组执行的活动 - 颜色对应组(橙色 = 贡献者,蓝色 = 审阅人员,绿色 = BDFL)。菱形表示在活动期间做出的决策。活动将在图表下方进行更详细的说明。

JIRA Workflow

活动

分类

  • 谁:审阅人员

  • 报表:打开工单

  • 目标:决定工单中描述的错误或增强实际上是真正的错误还是增强功能。

  • 流程(参见:创建工单)

    1. 工单是否仅涉及 1 件事?如果不是,则自行分割工单或要求提交者执行此操作。

    2. 工单是否清晰陈述了问题?如果不是,则自行更新或要求提交者执行此操作。

    3. 对于更大的增强功能/特性,最好建议提交者发布到 clojure-dev,然后在设计 Wiki 上创建一个页面。

    4. 对于错误,应该有一些证明问题实际存在(repl、测试等输出)。验证问题存在于当前版本的 Clojure 中。

    5. 工单中是否包含指向其他相关讨论的链接(例如 clojure-dev 主题、IRC 对话等)?

    6. 在这个阶段,并不需要有补丁程序或验证它是否解决了问题。

  • 操作,选择一项

    • 对工单发表评论以要求提供更多信息、更好的描述、更好的问题演示等

    • 以 Resolution=Decline 关闭,提供原因

      • 不是缺陷:提交者误解或误用了功能或工单没有意义

      • 范围太大:该功能更适合在设计维基中创建一个页面,而不是工单

      • 不希望的增强:增强不是我们想要做的事情

      • 重复的:现有工单

      • 太多事情:将此工单分解成更小的部分

    • 设置 Approval=Triaged - 问题是正常的

预筛选

  • 谁:审阅人员

  • 报告:已分类的工单

  • 目标:在 Rich 进行审查之前改进工单并筛选补丁程序,以便更快速地通过流程的剩余部分

  • 操作

    • 设置 Approval=Prescreened - 补丁程序正常

    • 就补丁程序问题对工单发表评论(保留在 Triaged 中)

审查

  • 人员:Rich

  • 报告:已分类已预筛选工单

  • 目标:第二次检查缺陷/增强功能是否值得研究,以及是否适合下一版本。

  • 操作

    • 以 Resolution=Declined 关闭 - 如上所述,工单可能不是我们想要解决的问题

    • 设置 Approval=Vetted - 问题很好

发布计划

  • 人员:Rich

  • 报告:已审查的工单

  • 目标:确定工单是下一版本中的范围还是应该作为积压

  • 操作

    • 将修复版本设置为“Backlog” - 不想在下一版本中修复它

    • 将修复版本设置为当前版本

      • 如果没有补丁程序,它将显示在Needs Patch报告中

      • 如果有补丁程序,它将显示在Screenable报告中

开发者补丁程序

  • 人员:贡献者(任何有签名 CA 的人)

  • 报告

    • Needs Patch - 对于需要补丁程序的工单

    • Incomplete工单 - 对于有补丁程序但需要修改的工单

  • 目标:创建一个高质量的工单和补丁程序以供考虑(请参阅下面的部分)

  • 操作

    • 根据评论编辑工单或更新补丁程序以解决问题或差距。

    • 添加一个新补丁并将“Patch”属性更改为“Code”或“Code and Test”会自动使补丁从“Needs Patch”移动到“Screenable”工单列表中。但是,将补丁添加到不完整的工单不会这样做。Alex Miller 会定期扫描不完整的工单,看看它们是否已准备好返回到可筛选的工单,并手动进行这些状态更改。

筛选

  • 谁:审阅人员

  • 报告

    • 可筛选工单(针对附有修补程序的经过审查的新工单)

    • 未完成且近期已更改的工单 - 自提交者将工单标记为“未完成”后,需要重新审核是否存在更新。

  • 目标:验证工单和修补程序是否已准备好由 Rich 审核。质量标准很高 - 工单和修补程序应该是完美的。

  • 检查(参见 创建工单开发修补程序筛选工单

    1. 是否有修补程序?

    2. 是否有测试?

    3. 提交者是否已签署 CA

    4. 您能将修补程序应用到当前源代码树中吗?

    5. 所有测试是否都通过?

    6. 修补程序是否简洁(没有多余的空格或超出问题范围的更改)?

    7. 文档字符串是否仍然准确?

    8. 是否存在潜在的性能影响?如果是,已执行哪些基准测试?

    9. 该解决方案是否遵循代码准则并在外形上与周围的代码类似?

    10. 该解决方案是否暗示在其他地方可能存在类似的更改?

    11. 该解决方案是否引入了可能需要考虑或记录的新故障条件?

    12. 该解决方案是否更改了可能影响用户的外部或内部 API?

  • 操作

    • 将批准设为“未完成”,并添加描述所需改进的评论

    • 将批准设为“已筛选” - 工单和修补程序完美无缺,Rich 应审核

最终筛选

  • 人员:Rich

  • 报告:已筛选工单

  • 目标:Rich 通过变更

  • 操作

    • 将批准设为“未完成” - 工单或修补程序需要改进

    • 将批准设为“确定” - 一切就绪,准备提交

提交

  • 谁:通常为 Stu H

  • 报告:确定工单

  • 目标:对更改进行最终审核并提交到 Clojure 源

  • 操作

    • 确保您拥有正确的修补程序

    • 确保提交者已签署 CA

    • 仔细检查修补程序是否可以干净地应用并进行本地构建

    • 提交并推送修补程序

      • 我发现从单独的本地存储库进行提交是最安全的。我有一个“clojure”git 克隆,它对 dev 和 screening 没有推送权限,还有一个用于提交的单独“clojure-for-commit”签出。这减少了我的肌肉记忆在错误的时间产生“git push”的可能性。

    • 将批准设为“已接受”,并关闭工单

待办事项审查

  • 谁:主要是 Rich

  • 报告:待办事项工单

  • 目标:了解积压工单是否应并入下个版本

  • 操作

    • 将修复版本从待办事项设为当前版本

    • (或者不设来保留在待办事项中)

工单报告摘要