You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从命令行重跑GitHub Action并更新Pull Request状态检查

解决GitHub Actions Workflow Dispatch重跑后PR状态检查不更新的问题

问题原因

用gh workflow run触发Workflow Dispatch时,工作流的运行上下文是目标分支而非Pull Request,GitHub不会自动将这次运行关联到PR的状态检查——哪怕运行的是同一提交,PR页面也不会识别为对应的状态更新。

解决方案

方案1:直接重跑PR触发的原有工作流实例(最可靠)

不要用Workflow Dispatch重新触发,而是找到PR对应的原始工作流运行实例并重跑,这样会自动关联PR状态检查:

  1. 先列出目标分支的工作流运行,找到PR触发的那一条的ID:
    gh run list --branch <你的分支名> --workflow <工作流文件名.yml>
    
  2. 用找到的运行ID重跑:
    gh run rerun <运行ID>
    

方案2:通过Workflow Dispatch触发时手动关联PR状态检查

如果必须用Workflow Dispatch触发,需要在工作流中添加步骤,手动调用GitHub API更新对应提交的状态检查:

  1. 在你的工作流文件中,添加如下步骤(放在合适的位置,比如开始和结束时分别更新状态):
    # 工作流开始时标记状态为运行中
    - name: Mark PR check as in progress
      if: github.event_name == 'workflow_dispatch'
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        COMMIT_SHA: ${{ github.sha }}
        CHECK_NAME: "你的状态检查名称" # 必须和PR页面显示的检查名称完全一致
      run: |
        curl -X POST \
          -H "Authorization: token $GITHUB_TOKEN" \
          -H "Accept: application/vnd.github.v3+json" \
          https://api.github.com/repos/${{ github.repository }}/statuses/$COMMIT_SHA \
          -d '{"state":"in_progress","context":"'"$CHECK_NAME"'","description":"Workflow Dispatch 重跑中"}'
    
    # 工作流结束后根据结果标记状态
    - name: Mark PR check as completed
      if: github.event_name == 'workflow_dispatch'
      if: always()
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        COMMIT_SHA: ${{ github.sha }}
        CHECK_NAME: "你的状态检查名称"
        RUN_STATUS: ${{ job.status }}
      run: |
        if [ "$RUN_STATUS" = "success" ]; then
          STATE="success"
          DESC="重跑成功"
        elif [ "$RUN_STATUS" = "failure" ]; then
          STATE="failure"
          DESC="重跑失败"
        else
          STATE="error"
          DESC="重跑异常"
        fi
    
        curl -X POST \
          -H "Authorization: token $GITHUB_TOKEN" \
          -H "Accept: application/vnd.github.v3+json" \
          https://api.github.com/repos/${{ github.repository }}/statuses/$COMMIT_SHA \
          -d '{"state":"'"$STATE"'","context":"'"$CHECK_NAME"'","description":"'"$DESC"'"}'
    
  2. 触发时指定PR的head提交SHA而非分支名,确保更新的是PR对应的提交:
    # 先获取PR的head提交SHA
    PR_HEAD_SHA=$(gh pr view <你的PR编号> --json headSha --jq .headSha)
    gh workflow run workflow_file_name.yml --sha "$PR_HEAD_SHA"
    

内容的提问来源于stack exchange,提问作者Eyal Gerber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:44:57