From 6157161293108b99d32c973322f927d90260f4ac Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 6 Mar 2026 14:56:43 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(branch-sync):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20main=20=E5=9B=9E=E7=81=8C=20dev=20=E6=97=B6=20merge?= =?UTF-8?q?able=20=E5=BC=82=E6=AD=A5=E8=AE=A1=E7=AE=97=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=BC=8F=E5=BC=80=E8=87=AA=E5=8A=A8=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加 mergeable 状态轮询,避免新建同步 PR 后立即返回 UNKNOWN - 在合并状态未稳定时输出中文告警与执行摘要 - 保持冲突分支、待计算分支与自动合并分支的处理路径清晰 --- .github/workflows/sync-main-to-dev.yml | 27 +++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/.github/workflows/sync-main-to-dev.yml b/.github/workflows/sync-main-to-dev.yml index c46cbcf..18f047a 100644 --- a/.github/workflows/sync-main-to-dev.yml +++ b/.github/workflows/sync-main-to-dev.yml @@ -106,9 +106,28 @@ jobs: run: | set -euo pipefail pr_number="${{ steps.sync_pr.outputs.pr_number }}" - mergeable="$(gh pr view "${pr_number}" --json mergeable --jq '.mergeable')" - merge_state_status="$(gh pr view "${pr_number}" --json mergeStateStatus --jq '.mergeStateStatus')" - echo "PR #${pr_number} 合并状态:mergeable=${mergeable}, mergeStateStatus=${merge_state_status}" + mergeable="UNKNOWN" + merge_state_status="UNKNOWN" + + for attempt in 1 2 3 4 5 6; do + mergeable="$(gh pr view "${pr_number}" --json mergeable --jq '.mergeable')" + merge_state_status="$(gh pr view "${pr_number}" --json mergeStateStatus --jq '.mergeStateStatus')" + echo "第 ${attempt} 次检查 PR #${pr_number} 合并状态:mergeable=${mergeable}, mergeStateStatus=${merge_state_status}" + if [ "${mergeable}" != "UNKNOWN" ]; then + break + fi + if [ "${attempt}" -lt 6 ]; then + echo "GitHub 仍在计算可合并状态,3 秒后重试..." + sleep 3 + fi + done + + if [ "${mergeable}" = "UNKNOWN" ]; then + echo "::warning::PR 合并状态仍在计算中,本次未开启自动合并,可稍后重跑 workflow 或手动开启。" + echo "merge_state_pending=true" >> "$GITHUB_OUTPUT" + else + echo "merge_state_pending=false" >> "$GITHUB_OUTPUT" + fi echo "mergeable=${mergeable}" >> "$GITHUB_OUTPUT" echo "merge_state_status=${merge_state_status}" >> "$GITHUB_OUTPUT" @@ -151,6 +170,8 @@ jobs: echo "- 合并状态详情:${{ steps.merge_state.outputs.merge_state_status }}" if [ "${{ steps.merge_state.outputs.mergeable }}" = "CONFLICTING" ]; then echo "- 结论:检测到冲突,需要手动处理后合并" + elif [ "${{ steps.merge_state.outputs.merge_state_pending }}" = "true" ]; then + echo "- 结论:GitHub 仍在计算合并状态,本次未开启自动合并;可稍后重跑 workflow 或手动开启 auto-merge" elif [ "${{ steps.auto_merge.outputs.result }}" = "enabled" ]; then echo "- 结论:已启用自动合并(满足保护规则后将自动入 dev)" else