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
|
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 'accept: application/json' \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-H "Authorization: token ${token}" \
|
-H "Authorization: token ${token}" \
|
||||||
-d "$json")
|
-d "$json")
|
||||||
|
|
||||||
if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then
|
RESPONSE=$(cat "$TEMP_FILE")
|
||||||
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message')
|
rm -f "$TEMP_FILE"
|
||||||
echo "Error: $ERROR_MSG"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
MERGED=$(echo "$RESPONSE" | jq -r '.merged')
|
case "$HTTP_CODE" in
|
||||||
|
200)
|
||||||
if [[ "$MERGED" == "true" ]]; then
|
MERGED=$(echo "$RESPONSE" | jq -r '.merged')
|
||||||
echo "Pull request merged successfully!"
|
if [[ "$MERGED" == "true" ]]; then
|
||||||
else
|
echo "Pull request merged successfully!"
|
||||||
echo "Error: Failed to merge pull request"
|
else
|
||||||
echo "$RESPONSE" | jq '.'
|
echo "Error: Failed to merge pull request"
|
||||||
exit 1
|
echo "$RESPONSE" | jq '.'
|
||||||
fi
|
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
|
# Usage
|
||||||
|
|||||||
Reference in New Issue
Block a user