Skip to content
本页内容由 AI 辅助生成与翻译,如有不当之处,欢迎协助改进。 在 GitHub 上编辑

工作流状态

OpenPR 中的每个 Issue 都有一个 状态,表示其在工作流中的位置。看板面板的列直接映射到这些状态。

OpenPR 默认提供四个状态,但通过三级解析系统支持完全自定义工作流状态。你可以按项目、按工作区定义不同的工作流,或使用系统默认值。

默认状态

mermaid
graph LR
    BL["Backlog"] --> TD["To Do"]
    TD --> IP["In Progress"]
    IP --> DN["Done"]

    IP -.->|"阻塞"| TD
    DN -.->|"重新打开"| IP
    BL -.->|"紧急提升"| IP
状态说明
Backlogbacklog想法、未来工作和未计划的项目。尚未安排。
To Dotodo已计划和优先排序。准备被领取。
In Progressin_progress由负责人正在进行中。
Donedone已完成并验证。

以上是内置状态,每个新工作区初始都使用这些状态。你可以自定义或添加额外状态,详见下方自定义工作流

状态流转

OpenPR 允许灵活的状态流转,没有强制约束——任何状态都可以转换到其他任何状态。常见模式包括:

流转触发示例
Backlog -> To DoSprint 计划、优先排序Issue 被拉入即将开始的 Sprint
To Do -> In Progress开发者领取工作负责人开始实现
In Progress -> Done工作完成PR 已合并
In Progress -> To Do工作被阻塞或暂停等待外部依赖
Done -> In ProgressIssue 重新打开发现 Bug 回归
Backlog -> In Progress紧急修复严重的生产问题

自定义工作流

OpenPR 通过三级解析系统支持自定义工作流状态。当 API 验证工作项的状态时,按以下优先级解析生效的工作流:

项目工作流  >  工作区工作流  >  系统默认

如果项目定义了自己的工作流,则优先使用。否则使用工作区级别的工作流。如果两者都不存在,则使用四个系统默认状态。

数据库结构

自定义工作流存储在两张表中(由迁移 0024_workflow_config.sql 引入):

  • workflows -- 定义一个命名工作流,关联到项目或工作区。
  • workflow_states -- 工作流中的各个状态。

每个状态具有以下属性:

字段类型说明
key字符串机器可读标识符(如 in_review
display_name字符串人类可读名称(如 "审核中")
category字符串状态分组类别
position整数在看板面板上的显示顺序
color字符串状态徽章的十六进制颜色代码
is_initial布尔值是否为新 Issue 的默认状态
is_terminal布尔值是否表示完成状态

通过 API 创建自定义工作流

第一步 -- 为项目创建工作流:

bash
curl -X POST http://localhost:8080/api/workflows \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "name": "工程流程",
    "project_id": "<project_uuid>"
  }'

第二步 -- 向工作流添加状态:

bash
curl -X POST http://localhost:8080/api/workflows/<workflow_id>/states \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "key": "in_review",
    "display_name": "审核中",
    "category": "active",
    "position": 3,
    "color": "#f59e0b",
    "is_initial": false,
    "is_terminal": false
  }'

示例:6 状态工程工作流

mermaid
graph LR
    BL["Backlog"] --> TD["To Do"]
    TD --> IP["In Progress"]
    IP --> IR["审核中"]
    IR --> QA["QA"]
    QA --> DN["Done"]

    IR -.->|"需要修改"| IP
    QA -.->|"未通过"| IP
状态Key类别初始状态终止状态
Backlogbacklogbacklog
To Dotodoplanned
In Progressin_progressactive
审核中in_reviewactive
QAqaactive
Donedonecompleted

动态验证

当工作项的状态被更新时,API 会根据该项目的生效工作流验证新状态。如果设置了在解析后的工作流中不存在的状态键,API 将返回 422 Unprocessable Entity 错误。状态不是硬编码的——它们在请求时动态查找。

看板面板

面板视图将 Issue 显示为列中的卡片,对应工作流状态。在列之间拖放卡片以更改状态。当自定义工作流激活时,面板会自动反映自定义状态及其配置的顺序。

每张卡片显示:

  • Issue 标识符(如 API-42
  • 标题
  • 优先级指示器
  • 负责人头像
  • 标签徽章

通过 API 更新状态

bash
# 将 Issue 移至 "in_progress"
curl -X PATCH http://localhost:8080/api/issues/<issue_id> \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"state": "in_progress"}'

通过 MCP 更新状态

json
{
  "method": "tools/call",
  "params": {
    "name": "work_items.update",
    "arguments": {
      "work_item_id": "<issue_uuid>",
      "state": "in_progress"
    }
  }
}

优先级

除状态外,每个 Issue 可以有优先级:

优先级说明
low可有可无,无时间压力
medium标准优先级,计划中的工作
high重要,应尽快处理
紧急urgent关键,需要立即处理

活动跟踪

每次状态变更都会记录在 Issue 的活动流中,包含操作者、时间戳和新旧值。这提供了完整的审计追踪。

下一步

Released under the Apache-2.0 License.