用途
该技能用于把已经准备好的主题分支推送到远端,并打开一个 GitHub Pull Request 或 GitLab Merge Request,主要服务于 CI 和代理自动化场景。它提供的是一个共享脚本,负责 push 与 open 两个动作。
主要能力
- 推送主题分支并创建 PR / MR。
- 支持 GitHub 与 GitLab 两种目标(通过环境与参数控制)。
- 在满足条件时联动 Jira:当 --issue KEY 或 JIRA_ISSUE 已设置且存在 JIRA_API_TOKEN 时,在打开 PR/MR 后调用 /rhdh-jira-link(link-pr-mr.js link),Jira 评论为 PR: <url> 或 MR: <url>(以及可选的 Adjusted 字段)。
- 标题处理:当 --title 缺少基分支后缀时自动追加 [<base>],包括 main 分支;若标题已经以基分支结尾则保持不变。
- 输出:标准输出包含 url: …;如果 --head 对应的 PR/MR 已存在,退出码为 0。
- 支持 --label 添加标签,支持 --dry-run 试运行。
使用方式
调用脚本时使用 SKILL 变量指向该技能目录,示例:
SKILL=<this skill's directory>
"$SKILL/scripts/create-pr-mr.sh" \
--cwd /path/to/checkout \
--base main \
--head chore/my-topic \
--title 'chore: short summary' \
--body-file /tmp/body.md \
[--issue RHIDP-12345] \
[--label ok-to-test] \
[--dry-run]
默认是 --no-open(不打开浏览器)。只有交互式代理运行时才传 --open。GITLAB_PIPELINE=true 会强制不打开浏览器。
代理场景:按 /mutation-gate 处理 push + open(如涉及 issue 还需 link)。通过名称调用 /rhdh-pr-mr(或已在技能克隆中时直接运行脚本路径)。当对话中已有 Jira key 时传入 --issue。最后报告 url: 那一行。
若同级的 Jira link 技能不在当前 pack 检出中的相邻位置,可用 RHDH_JIRA_LINK_SCRIPTS 覆盖 link 脚本目录。
Jira 关联行为
- --issue KEY 或已设置 JIRA_ISSUE,且有 JIRA_API_TOKEN:打开后调用 /rhdh-jira-link(link-pr-mr.js link)。
- 设置了 issue 但没有 token,或缺少 link 脚本:给出警告,但 PR/MR 仍然成功。
- 没有 issue:输出 [INFO] no Jira issue; skip link。
边界
- 不负责 /rhdh-pr-create 的工作(插件变更集、录制、monorepo 发布)。
- 当未设置 --issue 或 JIRA_ISSUE 时跳过 Jira 关联,绝不虚构 issue key。
- midstream 的 createPR.sh(distgit)在后续迁移前仍由 updateBaseImages.sh 使用。
测试
bash -n "$SKILL/scripts/create-pr-mr.sh"
shellcheck --severity=warning "$SKILL/scripts/create-pr-mr.sh"
"$SKILL/scripts/create-pr-mr.sh" --help
"$SKILL/tests/smoke.sh"
完成标准
主题分支已推送、打印出 PR 或 MR URL,并且要么更新了 Jira Web 链接,要么因缺少 issue 而明确跳过关联时,视为完成。