Issue
I was wondering how to check if a pull request has conflicts on GitHub using a script from my PC? There is a nice solution mentioned here to do it via GitHub actions: href="https://stackoverflow.com/a/71692270/4441211">https://stackoverflow.com/a/71692270/4441211
However, taking the same script from https://olivernybroe/action-conflict-finder and running it on my PC won't work unless I do a local merge. After identifying the conflicts I would have to discard the local merge. This process seems inefficient and I was looking for a "cleaner" and faster solution.
Solution
Here is how to pipe it without a shell loop, and parse JSON natively, either with gh api -q
built-in jq
query, or jq
itself.
#!/usr/bin/env sh
REPOSITORY_NAME=
OWNER=
gh api -H "Accept: application/vnd.github+json" \
"repos/${OWNER}/${REPOSITORY_NAME}/pulls" --cache 1h |
jq -j --arg curbranch "$(git rev-parse --abbrev-ref HEAD)" \
'
.[] | select(
(.base.ref == $curbranch) and
(.state == "open") and
(.draft == false)
) | .number | tostring + "\u0000"
' |
xargs -0 -I{} \
gh api -H "Accept: application/vnd.github+json" \
"repos/${OWNER}/${REPOSITORY_NAME}/pulls/{}" --cache 1h \
-q '
"PR #" + (.number | tostring) + ": " +
.title + " is " +
if .mergeable != false then "mergeable" else "not mergeable" end
'
Altenatively using a while read -r
loop instead of xargs
which seems problematic in some Windows environment:
gh api -H "Accept: application/vnd.github+json" \
"repos/${OWNER}/${REPOSITORY_NAME}/pulls" --cache 1h |
jq -r --arg curbranch "$(git rev-parse --abbrev-ref HEAD)" \
'
.[] | select(
(.base.ref == $curbranch) and
(.state == "open") and
(.draft != true)
) | .number
' | while read -r pr; do
gh api -H "Accept: application/vnd.github+json" \
"repos/${OWNER}/${REPOSITORY_NAME}/pulls/${pr}" --cache 1h \
-q '
"PR #" + (.number | tostring) + ": " +
.title + " is " +
if .mergeable != false then "mergeable" else "not mergeable" end
'
done
Answered By - Léa Gris Answer Checked By - Katrina (WPSolving Volunteer)