一键导入
gitcode-pr-issue-guide
生成 PR 或 Issue 文件,并可通过 GitCode API 直接提交到仓库。仅当用户明确说"提PR"、"创建PR"、"提交Issue"、"推送到PR"、"amend"、"force push"等时才触发,禁止根据上下文推断自动触发。所有操作必须经过用户许可,禁止擅自行动。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
生成 PR 或 Issue 文件,并可通过 GitCode API 直接提交到仓库。仅当用户明确说"提PR"、"创建PR"、"提交Issue"、"推送到PR"、"amend"、"force push"等时才触发,禁止根据上下文推断自动触发。所有操作必须经过用户许可,禁止擅自行动。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
ops-blas 算子全流程开发技能,协调 agent 团队完成设计->开发->验收->上库的完整开发链路。触发:用户要求开发新算子或实现某 BLAS 接口时。
为 BLAS 算子开发 GTest + CSV 驱动的精度 ST。触发场景: - 新算子 ST、编写 xxx_param.h / xxx_golden.h / xxx_npu_wrapper.h / xxx_test.cpp / xxx_test.csv - 改写旧式 TEST_F 为 CSV 参数化测试 按 6 步执行:分析 API → 写 param → 写 cpu/npu → 写 GTest → CMake → build.sh 验证。
ops-blas 日志框架使用规范。提供 Host 侧 dlog 日志集成模板、日志配置 API 说明和最佳实践。触发:算子开发中需要集成日志、检视日志使用规范、迁移 printf 到 dlog 时。
ops-blas 仓 AscendC 编码规范 + MR 安全编码规则速查索引。 **非开发期常驻上下文**:作为代码提交前的自查工具,按需读取。 触发时机:① 2.x.2 联调前 ② 2.x.3 验收前 ③ 3.1/4.2 代码检视前 ④ reviewer 检视 MR 代码时。 详细规则内容位于 references/ 目录,由调用方按需加载相关文档。
BLAS 算子仓编译与验证命令参考。编译算子、运行测试、打包的常用命令。触发:需要编译算子、运行测试、查看 build.sh 用法时。
工作流维护技能。任何对 agent/ 目录下文件的新增、修改、删除操作,都必须先触发本技能再执行操作,包括修改本技能自身。禁止未触发直接修改。
| name | gitcode-pr-issue-guide |
| description | 生成 PR 或 Issue 文件,并可通过 GitCode API 直接提交到仓库。仅当用户明确说"提PR"、"创建PR"、"提交Issue"、"推送到PR"、"amend"、"force push"等时才触发,禁止根据上下文推断自动触发。所有操作必须经过用户许可,禁止擅自行动。 |
本技能帮助用户快速生成符合仓库规范的 PR 或 Issue 文件。通过读取模板 + 问卷确认的方式,确保内容完整准确。模板直接复用仓库 .gitcode/ 目录下的官方模板。生成后可通过 GitCode API 直接提交到仓库。
| 模板类型 | 模板路径 | 输出文件名 |
|---|---|---|
| Pull Request | assets/PULL_REQUEST_TEMPLATE.zh-CN.md | PR-{branch-or-title}.md |
| 缺陷反馈 | assets/bug-report.yml | ISSUE-bug-{title}.md |
| 文档反馈 | assets/documentation.yml | ISSUE-doc-{title}.md |
| 需求建议 | assets/feature-request.yml | ISSUE-feature-{title}.md |
| 问题咨询 | assets/question.yml | ISSUE-question-{title}.md |
| 问卷 | 模板路径 | 触发条件 |
|---|---|---|
| PR-Issue 关联 | assets/questionnaire-pr-issue-link.md | 用户只提到提 PR 时 |
| Token 获取方式 | assets/questionnaire-token-source.md | 需要调用 GitCode API 时 |
| Squash Commit | assets/questionnaire-squash-commit.md | 分支有 >1 个 commit 时 |
| Commit Message 选择 | assets/questionnaire-commit-message.md | 用户同意 squash 后 |
| 触发编译 | assets/questionnaire-trigger-compile.md | PR 创建成功后 |
| Issue 指派人 | assets/questionnaire-issue-assignee.md | 创建 Issue 时(提 PR 同步创建则默认 assign 给用户) |
根据用户请求判断需要填写的模板类型(PR 或某种 Issue)。如果无法判断,询问用户。
当用户只提到提 PR 时,必须使用 question 工具发送 PR-Issue 关联问卷。
assets/)使用 AskUserQuestion 工具,将推断出的内容以问卷形式发送给用户:
cann 开发者,无需发问卷询问,直接填入问卷格式示例:
问题 1 - 描述(必填)
推断内容:本次 PR 新增了 XX 算子的实现...
选项:
- [ ] 使用推断内容
- [ ] 自定义填写
问题 2 - 关联的 Issue
推断内容:Issue #123
选项:
- [ ] 使用推断内容
- [ ] 无关联 Issue
- [ ] 自定义填写
用户逐项确认或补充每个字段的内容。对于用户选择"自定义填写"的字段,等待用户提供具体内容。
在生成文件前,对所有确认后的内容进行合规审查(参见 AGENT.md「公开内容合规限制」规则):
.agent/gitcode/ 目录下(如目录不存在,先 mkdir -p .agent/gitcode 创建)生成文件后,询问用户是否需要通过 GitCode API 直接提交到仓库。如果需要,进入「GitCode API 提交流程」。
PR 模板:模板本身是 md 格式,直接填充 HTML 注释占位符即可,保留原有结构。
Issue 模板(yml 来源):yml 文件定义了网页表单的多个文本框(textarea),每个文本框对应一个字段。生成输出时,必须转换为 md 格式,每个字段作为一个独立段落,方便用户逐段复制粘贴到网页表单的对应文本框中。
输出格式示例(以 bug-report.yml 为例):
## 问题描述
本次发现的缺陷是...
## 环境信息
- 芯片型号:Ascend 910B
- CANN 版本:8.0.RC1
- 操作系统:Ubuntu 20.04
## 重现步骤
1. 执行 xxx 命令
2. 观察到 xxx 异常
## 预期结果
期望输出应为...
## 日志 / 截图
(粘贴日志或截图)
## 备注
无
规则:
textarea 字段对应一个 ## 二级标题,标题文字取 yml 中 label 的中文部分当用户要求直接提交 Issue 或 PR 到 GitCode 仓库时,按以下流程操作。
https://gitcode.com/cann/ops-blashttps://gitcode.com/api/v5/repos/cann/ops-blasaccess_token=<token>必须先获取用户的 GitCode Access Token,再执行任何 API 调用。
按以下顺序获取,禁止跳步:
自动读取(静默提取,不打印 token):执行以下命令从 ~/.git-credentials 提取 token:
grep 'gitcode.com' ~/.git-credentials 2>/dev/null | head -1 | sed 's|https://[^:]*:\([^@]*\)@.*|\1|'
TOKEN,禁止打印到输出用户确认(必须执行,无论是否读取到 token):使用 question 工具发送 Token 获取方式问卷
每次 API 调用前确认:每次使用 token 直接发送(创建 PR、提交 Issue、发送评论等)之前,都必须发送问卷询问用户是否使用该 token 直接发送,禁止擅自使用 token 做任何操作
提交前可先验证 token 是否有效:
bash scripts/verify_token.sh "<用户token>" "cann/ops-blas"
步骤 0:确认 Issue 指派人
创建 Issue 前,需确认 assignee 设置:
question 工具发送 Issue 指派人问卷,询问用户~/.git-credentials 提取用户名)将用户名保存为变量 ISSUE_ASSIGNEE。
使用 scripts/batch_create_issues.sh 批量提交:
bash scripts/batch_create_issues.sh "<用户token>" "cann/ops-blas" "<issue目录>" "[文件模式]" "[assignee]"
参数说明:
token:用户的 GitCode access tokenrepo:仓库路径,如 cann/ops-blasissue_dir:包含 issue md 文件的目录file_pattern:文件匹配模式,默认 ISSUE-bug-*.md示例:
bash scripts/batch_create_issues.sh "abc123" "cann/ops-blas" "/path/to/issues" "ISSUE-bug-*.md"
脚本会:
# 前缀)步骤 0:确认分支已 rebase 最新目标分支
提交 PR 前,必须先确认当前分支已 rebase 了最新的目标分支(通常为 master/main),避免代码冲突:
git fetch origin <目标分支>
git merge-base --is-ancestor origin/<目标分支> HEAD
git rebase origin/<目标分支>
rebase 完成后,由于提交历史已改写,后续推送需使用 git push --force-with-lease。
如果 rebase 过程中出现冲突,必须解决冲突后再继续,禁止在存在冲突的情况下提交 PR。
如果 rebase 发生在 PR 已创建之后,rebase 后的 force push 触发编译询问由步骤 3 统一处理,无需按 AGENT.md 推送后规则重复询问。
步骤 1:检查并合并 commit
确认 rebase 完成后,检查当前分支相对于目标分支的 commit 数量:
git log --oneline <当前分支> --not <目标分支>
如果 commit 数量大于 1,必须使用 question 工具发送 Squash Commit 问卷。如果用户选择合并,继续发送 Commit Message 选择问卷。
步骤 2:创建 PR
使用 scripts/create_pr.sh 创建 PR:
bash scripts/create_pr.sh "<用户token>" "cann/ops-blas" "<PR标题>" "<源分支>" "<目标分支>" "<正文文件>"
参数说明:
token:用户的 GitCode access tokenrepo:仓库路径,如 cann/ops-blastitle:PR 标题head:源分支名(包含你的改动)base:目标分支名(通常为 main 或 master)body_file:PR 正文的 md 文件路径示例:
bash scripts/create_pr.sh "abc123" "cann/ops-blas" "新增 XX 算子" "feature-xx" "main" "PR-xx.md"
步骤 2.5:更新 PR 描述(可选)
当需要追加关联 Issue 或修改 PR 描述时,使用 scripts/update_pr.sh 更新:
bash scripts/update_pr.sh "<用户token>" "cann/ops-blas" "<PR编号>" "<正文文件>"
参数说明:
token:用户的 GitCode access tokenrepo:仓库路径,如 cann/ops-blaspr_number:PR 编号body_file:新 PR 正文的 md 文件路径示例:
bash scripts/update_pr.sh "abc123" "cann/ops-blas" "132" ".agent/gitcode/pr-body-update.md"
步骤 3:询问是否触发编译
PR 创建成功后,使用 question 工具发送 触发编译问卷。后续向 PR 分支推送代码时的编译询问由「向已创建的 PR 推送代码」流程的步骤 C 统一处理。
前提条件:
当 PR 已创建,后续需要推送新代码时(如修复 review 意见、补充修改),按以下流程操作:
步骤 A:询问是否 amend
使用 question 工具询问用户:
问题:PR 已存在,新代码如何处理?
选项:
- amend 到最后一个 commit(推荐,保持提交历史简洁)
- 新建 commit(保留独立提交记录)
步骤 B:根据选择执行
无论选择哪种方式,都必须先检查当前分支相对于目标分支的 commit 数量(同步骤 1)。如果 commit 数量大于 1,必须发送 Squash Commit 问卷。如果用户选择合并,继续发送 Commit Message 选择问卷。
选择 amend:
git add <修改的文件>
git commit --amend --no-edit
git push --force-with-lease
如果之前执行了 squash,则 squash 操作已包含 push,无需再次推送。
选择新建 commit:
git add <修改的文件>
git commit -m "<commit message>"
如果之前执行了 squash,则 squash 操作已包含 push,无需再次推送。如果用户选择不合并或只有 1 个 commit,执行 git push。
步骤 C:询问是否触发编译
推送完成后,发送 触发编译问卷。此步骤已覆盖 AGENT.md「推送后触发编译」规则,无需按 AGENT.md 重复询问。
提交 Issue 前:
提交 PR 前:
在 PR 的特定代码行上添加评论(diff_comment 类型),常用于代码检视、Review 意见等场景。
关键概念:
position 参数是 diff 相对行号,不是文件行号+ 行),未变更的行无法评论单条评论:
使用 scripts/comment_pr_inline.sh:
bash scripts/comment_pr_inline.sh "<token>" "<repo>" "<pr_number>" "<file>" "<line>" "<comment>"
示例:
bash scripts/comment_pr_inline.sh "abc123" "cann/ops-blas" "120" \
"blas/ger/sger/arch22/sger_host.cpp" "113" \
"**[HIGH] SEC-1.2**: handle 未做空指针校验"
批量评论:
使用 scripts/comment_pr_inline_batch.py:
# 方式 1: 多个 --comment 参数
bash scripts/comment_pr_inline_batch.py \
--token "abc123" --repo "cann/ops-blas" --pr "120" \
--comment "file1.cpp:42:评论内容1" \
--comment "file2.cpp:100:评论内容2"
# 方式 2: JSON 文件批量输入
bash scripts/comment_pr_inline_batch.py \
--token "abc123" --repo "cann/ops-blas" --pr "120" \
--json comments.json
JSON 文件格式:
[
{"file": "path/to/file.cpp", "line": 42, "body": "**[HIGH]** 问题描述..."},
{"file": "path/to/other.cpp", "line": 100, "body": "**[MED]** 另一条评论..."}
]
注意事项:
line 必须是 PR 实际修改的行(diff 中的 + 行),否则脚本会尝试定位最近的修改行| 脚本 | 用途 | 路径 |
|---|---|---|
verify_token.sh | 验证 GitCode token 是否有效 | scripts/verify_token.sh |
batch_create_issues.sh | 批量创建 Issue | scripts/batch_create_issues.sh |
create_pr.sh | 创建 Pull Request | scripts/create_pr.sh |
update_pr.sh | 更新已有 PR 的描述 | scripts/update_pr.sh |
comment_pr.sh | 在 PR 评论区添加普通评论 | scripts/comment_pr.sh |
comment_pr_inline.sh | 在 PR 代码行上添加单条行内评论 | scripts/comment_pr_inline.sh |
comment_pr_inline_batch.py | 批量添加 PR 行内评论(支持 JSON 输入) | scripts/comment_pr_inline_batch.py |
所有脚本均位于本 skill 的 scripts/ 目录下,使用时需提供完整路径或使用相对路径。
.agent/gitcode/ 目录下,而非仓库根目录或 .opencode/ 目录下sleep 1)