更新 issue 状态

git:issue-update

关闭或打开 issue,修改 issue 标签。

# 适用事件

所有事件

# 工作机制

查找 issue 是否存在 -> 检查是否符合 when 条件(可选) -> 检查是否符合 lint 条件(可选)-> 更新 issue 状态或标签

# issue ID 获取方式

  • 如果传入了 fromText 参数,则从 fromText 中获取。其中 branch.delete 必传 fromText(分支已删除,无法从上下文中获取)
  • 如果没传入 fromText 参数,则从上下文中获取。
    • push 事件:从本次推送的所有 commit 的提交日志中获取
    • 合并请求类事件:从合并请求中的所有 commit 的提交日志中获取
    • 其他事件:从最新的一个 commit 的提交日志中获取

获取方式:提取上述文本中如下两种格式

  • #issueID:表示当前仓库的 issue。例如 #123,表示当前仓库 id 为 123 的 issue
  • groupName/repoName#issueID:表示跨仓库(其他仓库)的 issue。例如:test/test#123,表示 test/test 仓库中 id 为 123 的 issue。

注意 #123test/test#123 前需要有空格。

# 提交日志中如何带上 issue ID

提交代码时,可以在提交日志中加上关联的 issue ID, 可以在使用当前内置任务时可以自动提取到关联 issue,用来更新 issue 标签和状态

推荐在提交日志的 body 中带上 issue ID,命令行操作方式如下:

  • 方法一:

用 shift + enter 换行,建议 title 和 body 之间加上一个空行

git commit -m "fix(云原生构建): 修复一个错误

cnb/feedback#123"
  • 方法二:

以下提交方式 title 和 body 之间会产生两个换行

git commit -m "fix(云原生构建): 修复一个错误" -m "cnb/feedback#123"

# 参数

# fromText

  • type: String
  • required: false

从给定的文本中解析 issue id

不声明时,自动从上下文里的提交记录解析。

可以指定一个包含 issue id 引用的文本来声明操作对象,比如: ${LATEST_CHANGE_LOG}

# state

对应 state 属性,为 close 时,可关闭 issue

# label

label 的操作描述

# when

过滤条件,多个条件之间是 or 关系。为空时表示对所有 issue 操作。

# lint

检查 issue 是否满足条件,不满足时抛出异常,多个条件之间是 or 关系,为空时表示不做检查。

# defaultColor

  • type: String
  • required: false

添加的标签的默认颜色,当有传入 label.add 参数时才有效

# 输出结果

{
    issues // issue 列表
}

# 配置样例

# 合并到 main 后,更新标签

main:
  push:
    - stages:
        - name: update issue
          type: git:issue-update
          options:
            # 移除 “开发中” 标签,添加 “预发布” 标签
            label:
              add: 预发布
              remove: 开发中
            # 当有 “feature” 或 “bug” 标签才进行上述标签操作
            when:
              label:
                - feature
                - bug

# tag_push 时,关闭 issue,更新标签

$:
  tag_push:
    - stages:
        - name: 发布操作
          script: echo "可用发布任务替代当前任务"
        # 发布操作后执行 issue 更新操作
        - name: update issue
          type: git:issue-update
          options:
            # 关闭 issue
            state: close
            # 移除 “预发布” 标签,添加 “已发布” 标签
            label:
              add: 已发布
              remove: 预发布
            # 当有 “feature” 或 “bug” 标签才进行上述操作
            when:
              label:
                - feature
                - bug

# 根据 changelog 添加标签

$:
  tag_push:
    - stages:
        - name: changelog
          image: cnbcool/changelog
          exports:
            latestChangeLog: LATEST_CHANGE_LOG
        - name: update issue
          type: git:issue-update
          options:
            fromText: ${LATEST_CHANGE_LOG}
            label:
              add: 需求已接收
            when:
              label: feature