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、-1P、P0、P1、P2、P3-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 创建之前完成:
- 按扩展名判别是否是图片(
jpg/jpeg/png/gif/webp/bmp/svg) - 调用
POST /{repo}/-/issues/asset-groups批量申请附件上传 URL(分 image/file 两组) - 对每个预签名 OSS URL 用
PUT流式上传文件内容 - 拿到
asset_link(服务端返回的是 ready-to-use 的 markdown / HTML 片段,图片是<img />,文件是[name](url)) - 拼接到 body 末尾后调用
POST /{repo}/-/issues创建 issue
任何一步附件上传失败会直接中断,issue 不会被创建,避免「issue 创了但附件贴不进去」的破损状态。
API
| 步骤 | API | 方法 | 说明 |
|---|---|---|---|
| 申请附件组(可选) | ${API}/repos/{repo}/-/issues/asset-groups | POST | 仅在传了 --attach 时调;一次最多 16 个 upload URL |
| OSS 上传(可选) | {upload_url} (预签名 OSS) | PUT | 流式上传文件内容,拿到 asset_link |
| 创建 Issue | ${API}/repos/{repo}/-/issues | POST | 创建新 Issue;body 末尾拼接附件 markdown |
请求体字段: title(必填)、body、priority、labels、assignees、start_date、end_date