mcpField
R
rhdh-jira-link

rhdh-jira-link

github.com/redhat-developerDevelopment1956 installsUpdated 1d ago
Repository

About rhdh-jira-link

rhdh-jira-link is a skill for creating GitHub pull requests or GitLab merge requests and linking them to Jira. Its scripts also update Jira comments and optionally fill empty issue fields.

Key features

  1. 01Create GitHub PRs and GitLab MRs
  2. 02Add Jira Web links and comments
  3. 03Update existing PR/MR comments
  4. 04Optionally fill empty Jira fields
  5. 05Mark linked requests merged or closed

Use cases

  1. 01Create a PR/MR and link it to a Jira issue
  2. 02Add Jira links and comments to an existing PR/MR
  3. 03Update Jira links after a request is merged or closed

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/redhat-developer/rhdh-skills --skill rhdh-jira-link

After installing, type/rhdh-jira-linkin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

config.example.json
agents/
openai.yaml
references/
raise-pr-integration.md
scripts/
create-pr-mr.js
lib.js
link-pr-mr.js
tests/
lib.test.mjs

Details

From the project README

Jira PR / MR links

Zero-token Node scripts for GitHub and GitLab: create the PR/MR, attach a Jira remote Web link, post or update a structured comment, and optionally fill empty issue fields.

Scripts live under this skill's scripts/ directory. Resolve that path from the installed skill root (agents already have it when reading this file):

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" …

Another skill that needs the link step invokes /rhdh-jira-link by name and lets this skill run its own scripts; it never calls into this directory by path.

Preferred: one-shot create (create-pr-mr.js)

After the feature branch is committed:

Compose the reviewer-facing PR or MR title and body, then invoke /prose-editing once on both in the flavored register. Preserve Jira keys, closing syntax, headings, checklists, links, and the required Generated-by line. Pass the edited strings to create-pr-mr.js; it is a transport layer and must not edit them. The structured Jira link comment created later is a protocol payload and does not receive this prose pass.

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
)"
  1. git push -u origin HEAD (unless --no-push)
  2. Detects GitHub vs GitLab from origin
  3. Runs gh pr create or glab mr create
  4. Runs link-pr-mr.js link (unless --no-link). Missing Jira auth is an error; pass --no-link to skip linking.
  5. Opens the diffs page (unless --no-open)

Flags: --draft, --no-push, --no-link, --no-open, --no-defaults, --no-comment, --no-jira-ref, --host github|gitlab.

Auth

Either works (same token either way):

  1. JIRA_API_TOKEN + login/server in ~/.config/.jira/.config.yml, or
  2. .jira-token (email:token) next to acli — the same credential /rhdh-jira-api uses. Invoke /rhdh-jira-api by name for the authoritative auth setup instead of duplicating it here.

create-pr-mr.js appends Ref: https://redhat.atlassian.net/browse/KEY and Generated-by: cursor to the PR/MR body when missing. It skips the Jira Ref: line for community-plugins remotes (or when --no-jira-ref is set) so that repo stays free of Jira browse URLs in git history / PR text.

Link-only: link-pr-mr.js

When a PR/MR already exists:

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 optional; inferred from URL when omitted.
  • --no-defaults skips In Progress + metadata fills (Web link + comment still run).
  • --no-comment skips the Jira comment.
  • If a comment already mentions the PR/MR URL, it is updated in place (comments are paginated).
RHDHPLAN → RHIDP auto-move

If the linked issue is an Epic, Story, or Task in RHDHPLAN, link moves it to RHIDP (same issue type) via the Jira bulk-move API, then continues Web link / defaults / comment on the new key. Features and other RHDHPLAN types are left alone.

Stdout includes move: … and the post-move issue: key.

Comment shape (only newly set fields; omit kept values):

PR: https://github.com/org/repo/pull/123

or, for GitLab:

MR: https://gitlab.cee.redhat.com/group/repo/-/merge_requests/817

Then, when any defaults were newly set:

Adjusted fields:
* Priority: Normal
* Status: In Progress

The Web link title remains repo #N: <title> (unchanged).

Mark merged / closed
node "$SKILL/scripts/link-pr-mr.js" mark-merged --issue RHIDP-12345

Prefixes Web link titles with [x] merged: when the PR/MR is merged, or [!] closed: when it is closed without merging. Does not re-apply defaults/comment. Stdout lists each title and its PR/MR URL (indented under the title). Open PRs/MRs stay in leftOpen with no prefix.

mark-merged checks status via gh / glab. Failed checks print a warn: line and leave the link in leftOpen (do not treat a failed check as closed). For GitLab remotelinks it passes --hostname from the URL (e.g. gitlab.cee.redhat.com), so CEE MRs resolve against the right host. Prefer glab default host: gitlab.cee.redhat.com in ~/.config/glab-cli/config.yml for day-to-day CEE work.

When summarizing to the user, use markdown links ([<title>](<url>)).

Title format (for link --title)

<repo-short-name> #<id>: <full PR/MR title>

Merged: [x] merged: <repo-short-name> #<id>: <full PR/MR title> Closed (not merged): [!] closed: <repo-short-name> #<id>: <full PR/MR title>

Defaults link applies (only if empty)

No built-in team/assignee values. First run with defaults enabled requires a config file (or env/CLI). Missing keys error when applying defaults; the Web link and comment still succeed with --no-defaults.

mkdir -p ~/.config/rhdh-jira-link
cp "$SKILL/config.example.json" ~/.config/rhdh-jira-link/config.json
# edit assigneeEmail, teamId, teamName, boardId, …

Also accepted: $JIRA_PR_MR_CONFIG or $SKILL/config.local.json (keep personal email out of the repo).

Precedence: CLI > env > config file > Jira CLI hints (login / board.id from ~/.config/.jira/.config.yml may fill assignee/board only).

FieldRequired when applying defaults
assigneeEmailyes (or Jira login email)
teamId / teamNameyes, or set either to NONE to skip team and sprint
boardIdyes (or jira CLI board.id), unless team/sprint skipped via NONE
storyPointsyes
priorityNameyes (only fills when priority is empty)
storyPointsFieldyes
teamField / sprintFieldyes, unless team/sprint skipped via NONE
Status→ In Progress unless already In Progress / Review / Closed

Skip all defaults: --no-defaults or JIRA_PR_MR_APPLY_DEFAULTS=0.

Skip only team + sprint (still set points / assignee / priority / In Progress):

"teamName": "NONE",
"teamId": "NONE"

Relationship to /rhdh-pr-create

/rhdh-pr-create owns the rhdh-plugins / community-plugins monorepo PR flow (build, changesets, recordings). This skill owns the Jira Web link + comment (and optional defaults) for any repo. Invoke it by name; do not read or run its files.

Once /rhdh-pr-create has created a PR, it hands the URL and title back and this skill runs the link step with --no-defaults, leaving /rhdh-pr-create free to transition the issue to Review (see references/raise-pr-integration.md).

Agent checklist

  1. Resolve Jira key. Ask if missing (unless user skipped Jira).
  2. Commit on a feature branch. Put the Jira browse URL and Generated-by: cursor in the PR/MR body (create-pr-mr.js appends them when missing; skips Ref: for community-plugins).
  3. Run create-pr-mr.js once. Report url: / diffs: / browserOpened: / jiraLink: from its stdout (browserOpened: true or --no-open means the open step is already done).
  4. Fallback: raw create → run link-pr-mr.js, then open diffs yourself once.
  5. For mark-merged: link-pr-mr.js mark-merged --issue KEY. Report merged, closed, and still-open Web links.
  6. In user-facing summaries, link PR/MRs as [<title>](<url>).

Every run here is an external write

Creating a PR/MR, writing a Jira Web link, posting a comment, moving an issue to another project, and filling default fields all change something outside the session. Invoke /mutation-gate and follow it before the first command: one script invocation can perform several of these at once, so state them as one set — push, create, link, comment, defaults — and get a single approval covering all of them.

Completion

Complete when the answer names the PR/MR URL and diffs link, the Jira key it was linked to — including the post-move key when an RHDHPLAN Epic, Story, or Task moved to RHIDP — the Web link title, whether the comment was posted or updated, which default fields were newly set, and every warn: line the scripts printed. Report the fields the script left alone as kept, never as set. A Web link that succeeded followed by a defaults update that errored is a partial link, so say which half landed.

Comments

Markdown supported