自动编码并提交推送
根据用户需求选择:
- 新建分支 -> 编写代码 -> 推送代码 -> 并创建 PR
- 切换到 PR 源分支 -> 编写代码 -> 推送代码更新 PR
步骤
1. 理解需求
分析用户输入,明确要修改的文件、功能/Bug 描述、目标分支(PR 的 base)。 如需了解项目结构,直接在当前工作区读取代码。如需了解 PR 变更,可使用 cnb-pr-diff Skill。
2. 判断场景并准备分支
根据触发场景切换到正确的工作分支:
- PR 评论触发(
CNB_PULL_REQUEST_IID存在):在此分支上继续修改git checkout "$CNB_PULL_REQUEST_BRANCH" git pull origin "$CNB_PULL_REQUEST_BRANCH" - ISSUE 评论触发 PR 已存在,则切换到 PR 源分支继续开发
git checkout <PR 源分支名> && git pull - ISSUE 评论触发 PR 不存在,则基于目标分支创建新分支
auto/{关键词1}-{关键词2}-{4位随机后缀}git checkout -b auto/{关键词1}-{关键词2}-$(openssl rand -hex 2)⚠️ 分支命名精简规则:
{关键词}:从 ISSUE 标题/描述中提取 2 个核心关键词(名词或动词),用短横线连接,每个关键词不超过 2 个英文单词{随机后缀}:固定 4 位十六进制,用$(openssl rand -hex 2)生成- 总长度控制:分支名
auto/之后的部分不超过 20 个字符 - 示例:
auto/optimize-skill-3a7f、auto/login-error-b2c1
3. 编写代码
直接在工作区中读取和修改文件,实现代码变更。遵循项目已有的代码风格,确保 import/依赖完整。
生成/修改 .cnb.yml 时的特殊处理:
- 优先加载
cnb-pipelineskill 的 SKILL.md,参照其中的语法文档和校验方式生成并验证配置 - 生成完成后需通过 cnb-pipeline skill 提供的校验方式验证,校验通过后才能提交;校验失败则修复后重新校验
4. 验证与提交
# 查看变更概览
git diff --stat
# 如有构建/lint 命令则执行验证
# 暂存并提交
git add -A
git commit -m "{类型}: {简短描述}"
类型:feat(新功能) / fix(修复) / refactor(重构) / docs(文档) / chore(其他)
5. 推送变更并判断是否需要创建 PR
# 推送当前分支
git push origin HEAD
根据推送输出判断是否已有 PR:
- 已有 PR(输出包含
There is already has pull request):跳过创建 PR,直接在评论中告知用户 - 无 PR(输出包含
Create a pull request或new branch):走第 6 步创建 PR
⚠️ 只有新建分支且推送后确认无 PR 时,才执行第 6 步。
示例 1 — 已有 PR,跳过创建:
$ git push origin HEAD
remote:
remote: There is already has pull request for 'fix/optimize-cnb-code-commit-skill' by visiting:
remote:
remote: https://cnb.cool/cnb/skills/cnb-skill/-/pulls/140
remote:
To https://cnb.cool/cnb/skills/cnb-skill.git
e3d8f95..639bd55 HEAD -> fix/optimize-cnb-code-commit-skill
# 输出包含 "There is already has pull request" → 已有 PR,不再创建
# 在评论中告知用户:PR 已存在,代码已推送到 PR #140
示例 2 — 无 PR,需要创建:
$ git push origin HEAD
remote:
remote: Create a pull request for 'fix/optimize-cnb-code-commit-skill' to 'main' by visiting:
remote:
remote: https://cnb.cool/cnb/skills/cnb-skill/-/compare/main...fix/optimize-cnb-code-commit-skill
remote:
To https://cnb.cool/cnb/skills/cnb-skill.git
* [new branch] fix/optimize-cnb-code-commit-skill -> fix/optimize-cnb-code-commit-skill
# 输出包含 "Create a pull request" → 无 PR,需要走第 6 步创建
6. 创建 PR
# 创建 PR, 仅推送后确认无 PR 时执行
cnb pulls post-pull --repo "$CNB_REPO_SLUG" \
--base "$CNB_DEFAULT_BRANCH" \
--head "$(git branch --show-current)" \
--title "{类型}: {简短描述}" \
--body '<pr-body>'
注意事项
- 编码前先理解项目结构和代码风格
- 需求不明确或范围过大时,先在评论中确认再执行
- 不修改无关文件,推送前确认变更正确
- 生成/修改
.cnb.yml文件时需使用 cnb-pipeline skill 技能 - 若任务由 Issue 发起,PR body 末尾必须追加
Ref #<CNB_ISSUE_IID>(如Ref #11) —— 遗漏会导致 Issue 中看不到关联的 PR; pr-body使用单引号包裹传参,可减少不必要的 shell 转义,比如:可直接用真换行拼接,而不是\n字面量。
禁止的操作
- ❌ PR 不存在时,禁止在默认分支上修改代码,需新建分支并创建 PR
- ❌
git push --force(不要强制推送,除非用户明确要求;如需覆盖可用--force-with-lease) - ❌ 推送代码后轮询/等待 CI 状态(CI 失败会自动唤起 NPC,无需主动等待)