关于 rhdh-jira-link
rhdh-jira-link 是用于创建 GitHub PR 或 GitLab MR 并关联 Jira 的技能。其脚本还可更新 Jira 评论,并按需填写空缺的问题字段。
主要功能
- 01创建 GitHub PR 和 GitLab MR
- 02添加 Jira 网页链接和评论
- 03更新已有 PR/MR 评论
- 04按需填写空缺的 Jira 字段
- 05标记关联请求已合并或关闭
适用场景
- 01创建 PR/MR 并关联 Jira 问题
- 02为已有 PR/MR 添加 Jira 链接和评论
- 03请求合并或关闭后更新 Jira 链接
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ redhat-developer/ rhdh-skills --skill rhdh-jira-link安装后在 Claude Code 中输入/rhdh-jira-link确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
config.example.jsonagents/openai.yamlreferences/raise-pr-integration.mdscripts/create-pr-mr.jslib.jslink-pr-mr.jstests/lib.test.mjs详细介绍
Jira PR / MR 链接
为 GitHub 和 GitLab 提供零令牌 Node 脚本:创建 PR/MR、附加 Jira 远程 Web 链接、发布或更新结构化评论,并可选择填充空的议题字段。
脚本位于此技能的 scripts/ 目录下。请从已安装的技能根目录解析该路径(Agent 读取此文件时已能获取该路径):
SKILL="$(cd "$(dirname "$0")" && pwd)" # or the absolute path to this skill root
node "$SKILL/scripts/create-pr-mr.js" …
node "$SKILL/scripts/link-pr-mr.js" …
需要链接步骤的其他技能会按名称调用 /rhdh-jira-link,并让此技能运行自己的脚本;绝不会通过路径调用此目录。
首选:一次性创建(create-pr-mr.js)
功能分支提交后:
撰写面向审阅者的 PR 或 MR 标题和正文,然后以 flavored 语体对两者同时调用一次 /prose-editing。保留 Jira 键、关闭语法、标题、检查清单、链接以及必需的 Generated-by 行。将编辑后的字符串传给 create-pr-mr.js;它是传输层,不得编辑这些内容。稍后创建的结构化 Jira 链接评论是协议负载,不需要经过此文本润色步骤。
node "$SKILL/scripts/create-pr-mr.js" \
--issue RHIDP-12345 \
--title 'fix: short summary' \
--target main \
--body "$(cat <<'EOF'
## Summary
- …
## Test plan
- [ ] …
Generated-by: cursor
EOF
)"
git push -u origin HEAD(除非使用--no-push)- 根据
origin检测 GitHub 或 GitLab - 运行
gh pr create或glab mr create - 运行
link-pr-mr.js link(除非使用--no-link)。缺少 Jira 身份验证信息时会报错;传入--no-link可跳过链接操作。 - 打开差异页面(除非使用
--no-open)
标志:--draft、--no-push、--no-link、--no-open、--no-defaults、--no-comment、--no-jira-ref、--host github|gitlab。
身份验证
以下任一种方式均可(两者使用相同令牌):
JIRA_API_TOKEN,以及~/.config/.jira/.config.yml中的login/server;或acli旁边的.jira-token(email:token)——与/rhdh-jira-api使用的凭据相同。请按名称调用/rhdh-jira-api,以获取权威的身份验证设置说明,而不要在此重复说明。
如果缺少以下内容,create-pr-mr.js 会将 Ref: https://redhat.atlassian.net/browse/KEY 和 Generated-by: cursor 附加到 PR/MR 正文中。对于 community-plugins 远程仓库(或设置了 --no-jira-ref 时),它会跳过 Jira Ref: 行,以避免该仓库的 git 历史记录 / PR 文本中出现 Jira 浏览 URL。
仅链接:link-pr-mr.js
PR/MR 已存在时:
node "$SKILL/scripts/link-pr-mr.js" link \
--issue RHIDP-12345 \
--url 'https://gitlab.cee.redhat.com/rhidp/example/-/merge_requests/817' \
--title 'example #817: fix: short summary' \
--host gitlab
--host为可选项;省略时会根据 URL 推断。--no-defaults会跳过「进行中」状态和元数据填充(Web 链接和评论仍会执行)。--no-comment会跳过 Jira 评论。- 如果评论中已提及 PR/MR URL,则会在原位置更新(评论会分页处理)。
RHDHPLAN → RHIDP 自动迁移
如果关联议题是 RHDHPLAN 中的 Epic、Story 或 Task,link 会通过 Jira 批量迁移 API 将其迁移到 RHIDP(保持相同议题类型),然后继续使用新键执行 Web 链接 / 默认值 / 评论操作。Features 和其他 RHDHPLAN 类型不会迁移。
标准输出包含 move: … 和迁移后的 issue: 键。
评论格式(仅包含新设置的字段;省略 kept 值):
PR: https://github.com/org/repo/pull/123
或对于 GitLab:
MR: https://gitlab.cee.redhat.com/group/repo/-/merge_requests/817
然后,如果有任何默认值是新设置的:
Adjusted fields:
* Priority: Normal
* Status: In Progress
Web 链接标题仍为 repo #N: <title>(不变)。
标记为已合并 / 已关闭
node "$SKILL/scripts/link-pr-mr.js" mark-merged --issue RHIDP-12345
PR/MR 已合并时,会在 Web 链接标题前加上 [x] merged: ;未合并而已关闭时,则加上 [!] closed: 。不会重新应用默认值或评论。标准输出会列出每个标题及其 PR/MR URL(在标题下缩进显示)。仍处于开放状态的 PR/MR 会保留在 leftOpen 中,且不加前缀。
mark-merged 会通过 gh / glab 检查状态。检查失败时会输出一行 warn:,并将链接保留在 leftOpen 中(不要将检查失败视为已关闭)。对于 GitLab 远程链接,它会从 URL 中传入 --hostname(例如 gitlab.cee.redhat.com),以便 CEE MR 使用正确的主机解析。日常 CEE 工作建议在 ~/.config/glab-cli/config.yml 中将 glab 默认 host: gitlab.cee.redhat.com。
向用户总结时,请使用 Markdown 链接([<title>](<url>))。
link --title 的标题格式
<repo-short-name> #<id>: <full PR/MR title>
已合并:[x] merged: <repo-short-name> #<id>: <full PR/MR title>
已关闭(未合并):[!] closed: <repo-short-name> #<id>: <full PR/MR title>
link 应用的默认值(仅在为空时)
没有内置的团队或受派人值。 首次启用默认值运行时,必须提供配置文件(或环境变量/CLI)。应用默认值时,缺少键会报错;使用 --no-defaults 时,Web 链接和评论仍会成功。
mkdir -p ~/.config/rhdh-jira-link
cp "$SKILL/config.example.json" ~/.config/rhdh-jira-link/config.json
# edit assigneeEmail, teamId, teamName, boardId, …
也接受:$JIRA_PR_MR_CONFIG 或 $SKILL/config.local.json
(请勿将个人邮箱放入代码库)。
优先级:CLI > 环境变量 > 配置文件 > Jira CLI 提示(~/.config/.jira/.config.yml 中的 login / board.id 只能用于补充受派人/看板)。
| 字段 | 应用默认值时是否必需 |
|---|---|
assigneeEmail | 是(或 Jira login 邮箱) |
teamId / teamName | 是;或者将其中任一项设为 NONE,以跳过团队和冲刺 |
boardId | 是(或 jira CLI board.id),除非通过 NONE 跳过团队/冲刺 |
storyPoints | 是 |
priorityName | 是(仅在优先级为空时填入) |
storyPointsField | 是 |
teamField / sprintField | 是,除非通过 NONE 跳过团队/冲刺 |
| 状态 | → 进行中,除非已是进行中 / 审核中 / 已关闭 |
跳过所有默认值:--no-defaults 或 JIRA_PR_MR_APPLY_DEFAULTS=0。
仅跳过团队和冲刺(仍设置故事点/受派人/优先级/进行中状态):
"teamName": "NONE",
"teamId": "NONE"
与 /rhdh-pr-create 的关系
/rhdh-pr-create 负责 rhdh-plugins / community-plugins 单体仓库的 PR
工作流(构建、变更集、录制)。此技能负责任何仓库的 Jira Web 链接和评论
(以及可选的默认值)。按名称调用它;不要读取或运行其文件。
/rhdh-pr-create 创建 PR 后,会将 URL 和标题交回;随后此技能使用
--no-defaults 执行链接步骤,使 /rhdh-pr-create 可以自由地将问题转换为审核中(参见
references/raise-pr-integration.md)。
Agent 检查清单
- 确定 Jira 键。若缺失则询问(除非用户跳过 Jira)。
- 在功能分支上提交。将 Jira 浏览 URL 和
Generated-by: cursor放入 PR/MR 正文(create-pr-mr.js会在缺失时追加;对于 community-plugins 会跳过Ref:)。 - 运行一次
create-pr-mr.js。从其标准输出中报告url:/diffs:/browserOpened:/jiraLink:(browserOpened: true或--no-open表示打开步骤已完成)。 - 回退方案:直接创建 → 运行
link-pr-mr.js,然后自行打开差异页面一次。 - 对于标记为已合并:运行
link-pr-mr.js mark-merged --issue KEY。报告已合并、已关闭和仍打开的 Web 链接。 - 在面向用户的摘要中,将 PR/MR 链接写为
[<title>](<url>)。
此处的每次运行都会产生外部写入
创建 PR/MR、写入 Jira Web 链接、发布评论、将问题移至其他项目以及填写默认字段,都会更改会话之外的内容。请在执行第一条命令前调用 /mutation-gate 并遵循其要求:
单次脚本调用可能同时执行其中多项操作,因此请将它们作为一组说明——推送、创建、链接、评论、默认值——并获取一份涵盖所有操作的批准。
完成
完成时,答案必须列出 PR/MR URL 和差异链接、链接到的 Jira 键——如果 RHDHPLAN Epic、Story 或 Task 已移至 RHIDP,则包括移动后的键——Web 链接标题、评论是已发布还是已更新、新设置了哪些默认字段,以及脚本打印的每一行 warn:。将脚本未更改的字段报告为保留,绝不要报告为已设置。若 Web 链接成功但随后默认值更新报错,则属于部分链接;请说明哪一部分已完成。