fix: fix: dev-poll pre-lock should merge chore/gardener PRs without issue numbers (#539)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e48d180393
commit
7f2c5efd9d
1 changed files with 41 additions and 17 deletions
|
|
@ -187,22 +187,26 @@ try_direct_merge() {
|
||||||
|
|
||||||
if [ "${merge_http:-0}" = "200" ] || [ "${merge_http:-0}" = "204" ]; then
|
if [ "${merge_http:-0}" = "200" ] || [ "${merge_http:-0}" = "204" ]; then
|
||||||
log "PR #${pr_num} merged successfully"
|
log "PR #${pr_num} merged successfully"
|
||||||
# Close the issue (may already be closed by Codeberg auto-close)
|
if [ "$issue_num" -gt 0 ]; then
|
||||||
curl -sf -X PATCH \
|
# Close the issue (may already be closed by Codeberg auto-close)
|
||||||
-H "Authorization: token ${CODEBERG_TOKEN}" \
|
curl -sf -X PATCH \
|
||||||
-H 'Content-Type: application/json' \
|
-H "Authorization: token ${CODEBERG_TOKEN}" \
|
||||||
"${API}/issues/${issue_num}" \
|
-H 'Content-Type: application/json' \
|
||||||
-d '{"state":"closed"}' >/dev/null 2>&1 || true
|
"${API}/issues/${issue_num}" \
|
||||||
# Remove in-progress label
|
-d '{"state":"closed"}' >/dev/null 2>&1 || true
|
||||||
curl -sf -X DELETE \
|
# Remove in-progress label
|
||||||
-H "Authorization: token ${CODEBERG_TOKEN}" \
|
curl -sf -X DELETE \
|
||||||
"${API}/issues/${issue_num}/labels/in-progress" >/dev/null 2>&1 || true
|
-H "Authorization: token ${CODEBERG_TOKEN}" \
|
||||||
|
"${API}/issues/${issue_num}/labels/in-progress" >/dev/null 2>&1 || true
|
||||||
|
# Clean up phase/session artifacts
|
||||||
|
rm -f "/tmp/dev-session-${PROJECT_NAME}-${issue_num}.phase" \
|
||||||
|
"/tmp/dev-impl-summary-${PROJECT_NAME}-${issue_num}.txt"
|
||||||
|
matrix_send "dev" "✅ PR #${pr_num} (issue #${issue_num}) merged directly by dev-poll" 2>/dev/null || true
|
||||||
|
else
|
||||||
|
matrix_send "dev" "✅ PR #${pr_num} merged directly by dev-poll (chore)" 2>/dev/null || true
|
||||||
|
fi
|
||||||
# Clean up CI fix tracker
|
# Clean up CI fix tracker
|
||||||
ci_fix_reset "$pr_num"
|
ci_fix_reset "$pr_num"
|
||||||
# Clean up phase/session artifacts
|
|
||||||
rm -f "/tmp/dev-session-${PROJECT_NAME}-${issue_num}.phase" \
|
|
||||||
"/tmp/dev-impl-summary-${PROJECT_NAME}-${issue_num}.txt"
|
|
||||||
matrix_send "dev" "✅ PR #${pr_num} (issue #${issue_num}) merged directly by dev-poll" 2>/dev/null || true
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -248,7 +252,12 @@ for i in $(seq 0 $(($(echo "$PL_PRS" | jq 'length') - 1))); do
|
||||||
PL_ISSUE=$(echo "$PL_PR_BODY" | grep -oiP '(?:closes|fixes|resolves)\s*#\K\d+' | head -1 || true)
|
PL_ISSUE=$(echo "$PL_PR_BODY" | grep -oiP '(?:closes|fixes|resolves)\s*#\K\d+' | head -1 || true)
|
||||||
fi
|
fi
|
||||||
if [ -z "$PL_ISSUE" ]; then
|
if [ -z "$PL_ISSUE" ]; then
|
||||||
continue
|
# Allow chore PRs from gardener/planner/predictor to merge without issue number
|
||||||
|
if [[ "$PL_PR_BRANCH" =~ ^chore/(gardener|planner|predictor)- ]]; then
|
||||||
|
PL_ISSUE=0
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PL_CI_STATE=$(curl -sf -H "Authorization: token ${CODEBERG_TOKEN}" \
|
PL_CI_STATE=$(curl -sf -H "Authorization: token ${CODEBERG_TOKEN}" \
|
||||||
|
|
@ -491,8 +500,13 @@ for i in $(seq 0 $(($(echo "$OPEN_PRS" | jq 'length') - 1))); do
|
||||||
STUCK_ISSUE=$(echo "$PR_BODY" | grep -oiP '(?:closes|fixes|resolves)\s*#\K\d+' | head -1 || true)
|
STUCK_ISSUE=$(echo "$PR_BODY" | grep -oiP '(?:closes|fixes|resolves)\s*#\K\d+' | head -1 || true)
|
||||||
fi
|
fi
|
||||||
if [ -z "$STUCK_ISSUE" ]; then
|
if [ -z "$STUCK_ISSUE" ]; then
|
||||||
log "PR #${PR_NUM} has no issue ref — cannot spawn dev-agent, skipping"
|
# Allow chore PRs from gardener/planner/predictor to merge without issue number
|
||||||
continue
|
if [[ "$PR_BRANCH" =~ ^chore/(gardener|planner|predictor)- ]]; then
|
||||||
|
STUCK_ISSUE=0
|
||||||
|
else
|
||||||
|
log "PR #${PR_NUM} has no issue ref — cannot spawn dev-agent, skipping"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CI_STATE=$(curl -sf -H "Authorization: token ${CODEBERG_TOKEN}" \
|
CI_STATE=$(curl -sf -H "Authorization: token ${CODEBERG_TOKEN}" \
|
||||||
|
|
@ -517,6 +531,11 @@ for i in $(seq 0 $(($(echo "$OPEN_PRS" | jq 'length') - 1))); do
|
||||||
if try_direct_merge "$PR_NUM" "$STUCK_ISSUE"; then
|
if try_direct_merge "$PR_NUM" "$STUCK_ISSUE"; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
# Direct merge failed — dev-agent fallback requires a real issue number
|
||||||
|
if [ "$STUCK_ISSUE" -eq 0 ]; then
|
||||||
|
log "PR #${PR_NUM} direct merge failed — no issue ref for dev-agent, skipping"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
# Direct merge failed (conflicts?) — fall back to dev-agent
|
# Direct merge failed (conflicts?) — fall back to dev-agent
|
||||||
SESSION_NAME="dev-${PROJECT_NAME}-${STUCK_ISSUE}"
|
SESSION_NAME="dev-${PROJECT_NAME}-${STUCK_ISSUE}"
|
||||||
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
||||||
|
|
@ -529,6 +548,11 @@ for i in $(seq 0 $(($(echo "$OPEN_PRS" | jq 'length') - 1))); do
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Chore PRs without issue ref can only be direct-merged — skip dev-agent paths
|
||||||
|
if [ "$STUCK_ISSUE" -eq 0 ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
# Stuck: REQUEST_CHANGES or CI failure → spawn agent
|
# Stuck: REQUEST_CHANGES or CI failure → spawn agent
|
||||||
# Do NOT gate REQUEST_CHANGES on ci_passed: if a reviewer leaves REQUEST_CHANGES
|
# Do NOT gate REQUEST_CHANGES on ci_passed: if a reviewer leaves REQUEST_CHANGES
|
||||||
# while CI is still pending/unknown, we must act immediately rather than wait for
|
# while CI is still pending/unknown, we must act immediately rather than wait for
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue