竞态条件修复与重试逻辑 | AI生成和翻译

Home 2026.06

修复已应用。以下是摘要:


失败内容: 运行 27260998201(部署 Jekyll,2026-06-10 07:39 UTC)

失败位置: “Lint Markdown files” 步骤 — 提交了 chore(lint): Fix markdown lint issues,随后推送被拒绝两次。

根本原因: 竞态条件。该工作流有 4 个独立的提交+推送步骤(语言更新、笔记翻译、表格修复、lint)。每个步骤都使用了这种脆弱模式:

git push || { git pull --rebase; git push; }

当另一个并发运行在 rebase 和第二次推送之间执行推送时,会导致失败且无法恢复。这次 lint 步骤不幸中招。

修复内容: 将全部 4 个推送块替换为一个 push_with_retry() 函数,该函数最多重试 3 次,每次重试时执行 git pull --rebase,并在尝试之间等待 2 秒:

push_with_retry() {
  for attempt in 1 2 3; do
    git push && return 0
    echo "推送失败(尝试 $attempt/3),正在拉取并变基..."
    git pull --rebase || true
    sleep 2
  done
  echo "3 次尝试后推送失败"
  return 1
}

附注: 还有一条弃用警告 — actions/checkout@v4actions/setup-python@v4 运行在 Node.js 20 上,从 2026 年 6 月 16 日(6 天后)起将强制使用 Node.js 24。如果可用,建议升级到 actions/checkout@v5actions/setup-python@v5,或者设置 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true 以提前选择。

需要我提交并推送此修复吗?


Back Donate