跳转到内容

cnb-rs issue create

cnb-rs issue create [flags]

创建 Issue。

默认 title / body 从最近 commit message 拿(贴近 gh pr create --fill 体验),与 cnb-rs pr create 保持一致。创建成功后 stderr 输出成功提示,stdout 输出 Issue 的 Web 链接。支持设置优先级、标签、处理人、开始/结束日期以及附件。

选项

  • -t, --title <TITLE>:Issue 标题(默认:最近 commit message 首行,为空则报错)
  • -b, --body <BODY>:Issue 描述(默认:最近 commit message 首行之后的 body 部分)
    • 显式传 -b "" 会使用用户值(哪怕空),不会 fallback 到 commit body
    • commit body 首行为空行时(惯例:title\n\nbody)会被 trim_start 掉,避免 Issue 描述开头出现多余空行
  • -p, --priority <PRIORITY>: 优先级,可选值:-2P-1PP0P1P2P3
  • -l, --labels <LABELS>: 标签名称,多个用逗号分隔
  • -a, --assignees <ASSIGNEES>: 处理人用户名,多个用逗号分隔
  • --start-date <DATE>: 开始日期,格式:YYYY-MM-DD
  • --end-date <DATE>: 结束日期,格式:YYYY-MM-DD
  • --attach <FILE>: 附件文件路径,多个以逗号分隔或重复传。上传成功后以 markdown 链接追加在 body 末尾。一次最多 16 个附件(CNB asset-group 上限);超过请拆批或使用 comment add --attach 追加

继承的全局选项:

  • --repo <REPO>: 指定仓库路径(格式:group/repo
  • --domain <DOMAIN>: 指定目标域名(默认:cnb.cool

示例

bash
# 零参创建:title + body 都从最近 commit message 拿
$ cnb-rs issue create
 已创建 Issue #42: feat(auth): add OAuth2
https://cnb.cool/org/repo/-/issues/42

# 显式指定 title
$ cnb-rs issue create -t "修复登录问题"

# title + body 都显式指定
$ cnb-rs issue create -t "新功能需求" -b "详细描述..."

# 创建带完整信息的 Issue
$ cnb-rs issue create -t "紧急 Bug" -b "页面崩溃" -p P0 -l "bug,urgent" -a "zhangsan,lisi"

# 指定日期范围
$ cnb-rs issue create -t "Sprint 任务" --start-date 2025-01-01 --end-date 2025-01-15

# 创建时附带附件(一个图片 + 一个文件)
$ cnb-rs issue create -t "页面崩溃报告" -b "复现步骤\n1. 打开首页" --attach screenshot.png,trace.log
 申请 2 个附件上传 URL (image=1, file=1) ...
 上传 screenshot.png (45821 bytes) ...
 上传 trace.log (1024 bytes) ...
 已创建 Issue #123: 页面崩溃报告
https://cnb.cool/org/repo/-/issues/123

# body 末尾会被自动拼接上:
#   复现步骤
#   1. 打开首页
#
#   <img alt='screenshot.png' src='/-/imgs/issues/.../xxx.png' class='cnb-md-image__upload' />
#   [trace.log](/-/files/issues/.../trace.log)

附件上传工作流

附件上传在 issue 创建之前完成:

  1. 按扩展名判别是否是图片(jpg/jpeg/png/gif/webp/bmp/svg
  2. 调用 POST /{repo}/-/issues/asset-groups 批量申请附件上传 URL(分 image/file 两组)
  3. 对每个预签名 OSS URL 用 PUT 流式上传文件内容
  4. 拿到 asset_link(服务端返回的是 ready-to-use 的 markdown / HTML 片段,图片是 <img />,文件是 [name](url)
  5. 拼接到 body 末尾后调用 POST /{repo}/-/issues 创建 issue

任何一步附件上传失败会直接中断,issue 不会被创建,避免「issue 创了但附件贴不进去」的破损状态。

API

步骤API方法说明
申请附件组(可选)${API}/repos/{repo}/-/issues/asset-groupsPOST仅在传了 --attach 时调;一次最多 16 个 upload URL
OSS 上传(可选){upload_url} (预签名 OSS)PUT流式上传文件内容,拿到 asset_link
创建 Issue${API}/repos/{repo}/-/issuesPOST创建新 Issue;body 末尾拼接附件 markdown

请求体字段: title(必填)、bodyprioritylabelsassigneesstart_dateend_date

另请参阅

Released under the MIT License.