用途
create-pr 用于为 Marshroom cart issue 创建 Pull Request,并自动关联当前分支所对应的 issue。它适合在完成某个 cart issue 的开发工作后,快速生成带有正确关闭关键字的 PR,并同步更新 Marshroom 的本地状态。
主要能力
- 读取并解析 Marshroom 状态文件(默认路径为 ~/.config/marshroom/state.json,可通过 MARSHROOM_STATE 环境变量覆盖)。
- 通过 git branch --show-current 获取当前分支名。
- 根据当前分支和仓库匹配 cart 条目,支持宽松匹配:先尝试精确的 branchName 匹配,再尝试 /#N 后缀匹配(例如当前分支 HotFix/#20 可匹配 branchName 为 Feature/#20 的条目,因为两者都以 /#20 结尾)。
- 若无法匹配,会提示用户当前不在 cart issue 分支上。
- 提交当前改动,并在改动过大或可疑(如 100+ 变更、占位文件、数据库更新、日志等)时向用户请求许可。
- 推送当前分支:git push -u origin HEAD。
- 构建 PR 正文:包含改动简述;若匹配的 cart 条目存在非空 issueBody 字段,则加入 "## Original Issue" 段落供审查者参考;正文必须包含 close #<issueNumber> 以自动关闭 issue。
- 使用 gh pr create 创建 PR,标题取自匹配条目的 issue 标题。
- 创建后校验 PR 正文是否包含关闭关键字,若缺失则通过 gh pr edit 补充。
- 获取 PR 的 URL 与编号。
- 强制更新 issue 状态:优先使用 marsh pr;若 PATH 中找不到 marsh,则回退到使用 jq 的原子写入方式更新 state.json,将对应 issue 的 status 设为 pending,并写入 prNumber 与 prURL。
- 更新后读取 state.json 确认状态为 pending。
- 展示结果:PR URL、PR 编号、Issue 编号与标题、状态。
使用方式
该技能以步骤流程形式执行,关键命令包括:
git branch --show-current git push -u origin HEAD gh pr create gh pr view --json body -q '.body' gh pr edit --body "$(gh pr view --json body -q '.body')\n\nclose #<issueNumber>" gh pr view --json number,url -q '.number,.url'
状态更新回退命令:
STATE_FILE="${MARSHROOM_STATE:-~/.config/marshroom/state.json}"
TMP="$(mktemp "${STATE_FILE}.XXXXXX")"
jq --argjson n ISSUE_NUMBER --argjson prNum PR_NUMBER --arg prUrl "PR_URL"
'.cart |= map(if .issueNumber == $n then .status = "pending" | .prNumber = $prNum | .prURL = $prUrl else . end)'
"$STATE_FILE" > "$TMP" && mv -f "$TMP" "$STATE_FILE"
适用场景
- 在 Marshroom 工作流中完成某个 cart issue 后,需要创建关联 PR 并自动关闭对应 issue。
- 需要将 PR 编号与 URL 回写到 Marshroom 状态文件,以便后续跟踪。
限制
- state.json 更新为强制要求;若更新失败,必须停止并报告错误,不得静默继续。
- 若当前分支无法匹配任何 cart 条目,则不会创建 PR。
- 提交前若改动过大或可疑,需要用户确认。
- 依赖 git、gh、jq 等命令行工具;marsh 命令为可选,缺失时使用 jq 回退方案。
- 关于收费、价格、平台支持范围等信息,资料中暂未提供。