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:
@@ -180,27 +180,61 @@ 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"
|
||||
|
||||
MERGED=$(echo "$RESPONSE" | jq -r '.merged')
|
||||
|
||||
if [[ "$MERGED" == "true" ]]; then
|
||||
echo "Pull request merged successfully!"
|
||||
else
|
||||
echo "Error: Failed to merge pull request"
|
||||
echo "$RESPONSE" | jq '.'
|
||||
exit 1
|
||||
fi
|
||||
case "$HTTP_CODE" in
|
||||
200)
|
||||
MERGED=$(echo "$RESPONSE" | jq -r '.merged')
|
||||
if [[ "$MERGED" == "true" ]]; then
|
||||
echo "Pull request merged successfully!"
|
||||
else
|
||||
echo "Error: Failed to merge pull request"
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user