59 lines
1.5 KiB
Bash
Executable File
59 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Maps a PR review comment node ID to its parent thread.
|
|
# Fetches thread IDs and first comment IDs to find the match,
|
|
# then returns the matching thread with full comment details.
|
|
|
|
set -e
|
|
|
|
if [ $# -lt 2 ]; then
|
|
echo "Usage: get-thread-for-comment PR_NUMBER COMMENT_NODE_ID [OWNER/REPO]"
|
|
echo "Example: get-thread-for-comment 378 PRRC_kwDOP_gZVc6ySv89"
|
|
exit 1
|
|
fi
|
|
|
|
PR_NUMBER=$1
|
|
COMMENT_NODE_ID=$2
|
|
|
|
if [ -n "$3" ]; then
|
|
OWNER=$(echo "$3" | cut -d/ -f1)
|
|
REPO=$(echo "$3" | cut -d/ -f2)
|
|
else
|
|
OWNER=$(gh repo view --json owner -q .owner.login 2>/dev/null)
|
|
REPO=$(gh repo view --json name -q .name 2>/dev/null)
|
|
fi
|
|
|
|
if [ -z "$OWNER" ] || [ -z "$REPO" ]; then
|
|
echo "Error: Could not detect repository. Pass OWNER/REPO as third argument."
|
|
exit 1
|
|
fi
|
|
|
|
gh api graphql -f owner="$OWNER" -f repo="$REPO" -F pr="$PR_NUMBER" -f query='
|
|
query($owner: String!, $repo: String!, $pr: Int!) {
|
|
repository(owner: $owner, name: $repo) {
|
|
pullRequest(number: $pr) {
|
|
reviewThreads(first: 100) {
|
|
nodes {
|
|
id
|
|
isResolved
|
|
path
|
|
line
|
|
comments(first: 100) {
|
|
nodes {
|
|
id
|
|
author { login }
|
|
body
|
|
createdAt
|
|
url
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}' | jq -e --arg cid "$COMMENT_NODE_ID" '
|
|
[.data.repository.pullRequest.reviewThreads.nodes[]
|
|
| select(.comments.nodes | map(.id) | index($cid))]
|
|
| if length == 0 then error("No thread found for comment \($cid)") else .[0] end
|
|
'
|