Link a GitHub Issue + Linear Ticket on a PR
Appends a Sentry-style #### Issues block to a PR description, referencing both the GitHub issue and the Linear ticket pulled from the issue's linear-linkback comment.
Inputs
<issue-url>— GitHub issue URL likehttps://github.com/<owner>/<repo>/issues/<n>. Issue number alone is fine if the PR is in the same repo.- (optional)
<pr-number>— defaults to the open PR for the current branch.
Steps
-
Resolve the PR number — skip if user supplied one:
gh pr view --json number,body -q '.number'If no PR exists on the branch, stop and tell the user.
-
Extract issue number + repo from the input URL, or accept a bare
#1234for current repo. -
Fetch the Linear ticket from the issue's linear-linkback comment:
gh issue view <n> --repo <owner>/<repo> --json comments \ -q '.comments[] | select(.author.login=="linear-code") | .body' \ | grep -Eioe '[a-z]+-[0-9]+' | head -1If no match, fall back to asking the user for the Linear key, or omit it.
-
Read the existing PR body so you can append rather than overwrite:
gh pr view <pr-number> --json body -q '.body' -
Construct the new body. If the body is empty, use just the
#### Issuesblock. Otherwise, append it after a blank line. Don't duplicate — if#### Issuesis already present, replace that section instead of adding a second one.Format:
#### Issues * Resolves: #<n> * Resolves: <linear-key> -
Update the PR with a heredoc to preserve newlines:
gh pr edit <pr-number> --body "$(cat <<'EOF' <new body> EOF )" -
Confirm by echoing the resulting PR URL:
gh pr view <pr-number> --json url -q '.url'
Notes
- Linear linkback comments are posted by the GitHub user
linear-code. The body contains a markdown link whose text is the Linear key, e.g.PY-2357. - Project keys vary per repo (
PY-…for sentry-python,JS-…for sentry-javascript, etc.) — the regex[a-z]+-[0-9]+covers them. - Don't strip existing PR content. Always read first, append/replace second.
- If the issue doesn't have a Linear linkback yet (newly filed), proceed with just the GitHub issue reference and tell the user the Linear key is missing.