2021 年度总结 中,我首次宣布了公开工作的尝试:Xuanwo's Work。当时 Github Projects 本身在 Beta 中,缺乏周边的 API 支持,功能不完善。而且我也是首次尝试公开工作流程,因此没有过多的介绍我是如何使用,如何管理的。在九个月之后,Github Projects 终于提供了简陋的自动化支持,可以添加不属于同一个 owner 的 issue / PR,增加了基础的报表功能,作为一个任务管理工具来说功能已经基本完备。同时,我成为了 Github Projects 专家,掌握了绝大多数技巧。

因此今天这篇文章就跟大家分享一下我目前正在使用的基于 Github 的公开工作流程。

元数据

Github Projects 没有提供内置的工作流程,只提供了自定义元数据的能力。

目前支持的字段如下:

文本,数字,日期,单选项都比较常见,不再赘述。Iteration(迭代)是敏捷开发中的常用概念,追求固定的迭代周期,持续的产品交付。在这里主要就是用来表示一个固定的时间周期,一般是设置为两到三周一次迭代。

我的工作流程中引入了两个元数据:

  • 状态:Issue / PR 所处的状态
  • 周期:Issue / PR 处于哪个周期

状态

状态用来标记 Issue / PR 的状态,列表如下:

状态含义
📋 Backlog待完成的工作列表
🔨 In Progress正在完成的工作
🪤 In Waiting等待其他人完成的工作
🔍 In Review正在被 Review 的工作
📦 Done已经完成的工作
📬 Cancel放弃的工作
  • 被添加进入 Project 的 Issue 默认会被分配为 Backlog 状态
  • 状态的转换大部分是手动进行的,只有少量地方进行了自动化(比如正在进行中的 PR 被 Merge 了变成 Done)

周期

我的工作按照两周一次的周期进行循环:

  • 当前周期没有完成的工作会修改为 Backlog
  • 已完成的工作(包括取消的)则不做修改,周期变换时会被自动过滤

流程

我每个周期的工作流程大体如下:

  • 周期开始的时候大致想好这个周期要完成的任务,将 Iteration 修改为当前周期,这样我获得了一个当前周期的 Backlog 列表。
  • 每天早晨在 Backlog 中挑选计划完成的任务并修改状态为 In Progress
  • 需要等待他人来完成的任务标记为 In Waiting,有些 Issue 跟我的工作没有直接关系,但是我很关注的也会改成这个状态
  • 当任务完成提交 PR 后则修改为 In Review
  • 最后任务会进入到 Done 或者 Cancel

之所以强调大体如此是因为我不会特别严格的遵循这个状态转换过程,Issues 直接从 Backlog 变成 Done 也是经常的事情。

我使用自己写的一个脚本 AATP 来自动添加 Issues 和 PR 到 Project 中:每个小时执行一次,每次都会列取最近 24 小时内我创建的以及被 Assign 给我 Issues 和 PR 并添加到 Project 中。

- name: Add to project
  run: |
    GOPRIVATE=github.com GOPROXY=direct go install github.com/Xuanwo/auto-add-to-project@v0.1.3
    $HOME/go/bin/auto-add-to-project    
  env:
    AATP_TOKEN: ${{ secrets.AATP_TOKEN }}
    AATP_USER: Xuanwo
    AATP_PROJECT_NUMBER: 2

视图

Github Project 提供了视图功能,每个视图可以对 Issue 进行独立的过滤,分组和排序。我目前使用三个视图:

  • Current:使用 Filter iteration:"@current" 过滤当前 iteration 的 Issues 并根据 Status 进行分组
  • Backlog:使用 Filter status:"📋 Backlog" no:iteration 过滤没有被分配 iteration 的 Issues
  • Previous:使用 Filter iteration:"@previous" 过滤上个周期完成的 Issues

这里的 @current@previous 是 Github 提供的特殊语法用来分别表示当前和上一个周期(根据请求时间),这样可以实现每个周期轮替时自动更新,不需要手动修改 Filter。此外,Github 支持根据构造 Filter 来查询,比如说想查看我在 iteration 21 完成的任务可以使用: https://github.com/users/Xuanwo/projects/2/views/1?filterQuery=iteration%3A%22Iteration+21%22

报表

Github Projects 最近更新了报表功能,功能比较简单,无法公开访问。我用的不是非常多,只增加了当前周期 Issues 的状态:

总结

完全公开的工作模式让我的工作流程变得非常简单而透明:

  • 有工作需要我或者需要我关注只需要将 Issues 和 PR Assign 给我
  • 与我工作有关的所有上下文都在对应的 Issues 和 PR 中,不需要额外的进行备注和说明

这样我可以更专注完成工作,而不需要写冗长的工作报告。如果你跟我一样每天都工作在开源项目上的话,欢迎尝试这套基于 Github 的公开工作流程~