fix(pr): proper HTTP status code handling for merge command

Handle different HTTP status codes returned by merge API:
- 200: success (check merged field)
- 409: conflict (output error message)
- 404: not found
- 423: repo archived
- 405: empty response / try again later
- etc: generic error handling
This commit is contained in:
lyn
2026-04-01 16:09:00 +00:00
parent 77fa2f77bc
commit d764f30589

View File

@@ -180,20 +180,19 @@ cmd_merge() {
merge_when_checks_succeed: true
}')
RESPONSE=$(curl -s -X POST "https://git.hangman-lab.top/api/v1/repos/${OWNER}/${REPO_NAME}/pulls/${pr_index}/merge" \
TEMP_FILE=$(mktemp)
HTTP_CODE=$(curl -s -o "$TEMP_FILE" -w "%{http_code}" -X POST "https://git.hangman-lab.top/api/v1/repos/${OWNER}/${REPO_NAME}/pulls/${pr_index}/merge" \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H "Authorization: token ${token}" \
-d "$json")
if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message')
echo "Error: $ERROR_MSG"
exit 1
fi
RESPONSE=$(cat "$TEMP_FILE")
rm -f "$TEMP_FILE"
case "$HTTP_CODE" in
200)
MERGED=$(echo "$RESPONSE" | jq -r '.merged')
if [[ "$MERGED" == "true" ]]; then
echo "Pull request merged successfully!"
else
@@ -201,6 +200,41 @@ cmd_merge() {
echo "$RESPONSE" | jq '.'
exit 1
fi
;;
409)
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "Conflicting changes"')
echo "Error [$HTTP_CODE]: $ERROR_MSG"
exit 1
;;
404)
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "Not found"')
echo "Error [$HTTP_CODE]: $ERROR_MSG"
exit 1
;;
423)
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // "Repository is archived"')
echo "Error [$HTTP_CODE]: $ERROR_MSG"
exit 1
;;
405)
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message // empty')
if [[ -n "$ERROR_MSG" && "$ERROR_MSG" != "null" ]]; then
echo "Error [$HTTP_CODE]: $ERROR_MSG"
else
echo "Error [$HTTP_CODE]: Please try again later"
fi
exit 1
;;
*)
if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message')
echo "Error [$HTTP_CODE]: $ERROR_MSG"
else
echo "Error [$HTTP_CODE]: Unknown error"
fi
exit 1
;;
esac
}
# Usage