diff --git a/.gitea/workflows/scripts/publish.sh b/.gitea/workflows/scripts/publish.sh index 2422a4f..708a567 100755 --- a/.gitea/workflows/scripts/publish.sh +++ b/.gitea/workflows/scripts/publish.sh @@ -334,7 +334,14 @@ if [ -n "$(git status --porcelain)" ]; then git add -A git commit -m "@$NAME: issue #$NUM" fi -git push origin "HEAD:$BRANCH" || true +if git push origin "HEAD:$BRANCH"; then + : +else + status=$? + echo "git push failed for $BRANCH (exit $status)" + post "$(printf '⚠️ Push to branch `%s` failed (git exit %s). The PR will not open until the push succeeds. Please check the Actions log.%s' "$BRANCH" "$status" "$activity")" + exit 0 +fi git fetch -q origin 2>/dev/null || true prbody=$(printf '%s\n\n---\nResolves #%s' "$prdesc" "$NUM") @@ -360,14 +367,21 @@ url=$(printf '%s' "$resp" | jq -r '.html_url // empty' 2>/dev/null) prnum=$(printf '%s' "$resp" | jq -r '.number // empty' 2>/dev/null) if [ -z "$url" ]; then title="@$NAME: $TITLE" - resp=$(curl -sS -X POST "${hdr[@]}" "$API/pulls" \ + resp_body=/tmp/pr_create_resp.json + http_status=$(curl -sS -o "$resp_body" -w '%{http_code}' -X POST "${hdr[@]}" "$API/pulls" \ -d "$(jq -nc --arg t "$title" --arg h "$br" --arg b "$prbody" \ '{title:$t, head:$h, base:"main", body:$b}')") - echo "PR create ($br): $resp" + resp=$(cat "$resp_body" 2>/dev/null || true) + echo "PR create ($br): HTTP $http_status — $resp" url=$(printf '%s' "$resp" | jq -r '.html_url // empty' 2>/dev/null) prnum=$(printf '%s' "$resp" | jq -r '.number // empty' 2>/dev/null) fi -[ -z "$url" ] && { echo "PR open/lookup failed for $br — posting reply on issue instead"; post "$(printf '%s%s' "$reply" "$activity")"; exit 0; } +if [ -z "$url" ]; then + err_msg=$(printf '%s' "$resp" | jq -r 'if type=="object" and .message then .message else "(no error message in response)" end' 2>/dev/null) + echo "PR open/lookup failed for $br — HTTP $http_status — response: $resp" + post "$(printf '⚠️ Failed to open PR for branch `%s`.\n\nHTTP status: %s\nGitea message: %s%s' "$br" "$http_status" "$err_msg" "$activity")" + exit 0 +fi # Posts to the PR thread when we have a PR number, else to the origin issue ($NUM). prpost() {