GitHub工作流推送后检查状态异常,如何配置免检查推送?
解决GitHub工作流推送后检查状态挂起的问题
问题本质
当生成工作流向PR分支推送新提交后,GitHub会默认等待针对新提交运行所有配置的PR检查,但你的两个工作流仅在PR打开/重新打开时触发,没有新的检查启动,因此状态会卡在“Expected — Waiting for status to be reported”。要解决这个问题需要做到两点:一是让推送操作不触发任何工作流,二是让GitHub不再等待新的检查。
具体解决步骤
1. 配置生成工作流的推送操作,禁用触发
GitHub官方的GITHUB_TOKEN有个特性:用它推送代码不会触发任何工作流。你需要给EndBug/add-and-commit明确指定这个token,同时调整提交信息让验证工作流自动跳过。修改generate_blurhashes.yml的最后一步:
- uses: EndBug/add-and-commit@v9 with: token: ${{ secrets.GITHUB_TOKEN }} push: --no-verify message: '生成blurhash [skip ci]' committer_name: GitHub Actions committer_email: actions@github.com
token: ${{ secrets.GITHUB_TOKEN }}:强制使用GitHub提供的token,避免触发新的工作流push: --no-verify:跳过本地推送钩子,减少额外触发的可能- 提交信息里加
[skip ci]:让验证工作流识别到这个标记后跳过运行
2. 调整验证工作流的触发逻辑
让验证工作流不仅在PR打开/重新打开时运行,也在分支有新提交时运行,但自动跳过生成工作流的提交。修改validate_json.yml:
name: Validate-JSON on: pull_request: types: [opened, reopened, synchronize] jobs: Validate-JSON: runs-on: ubuntu-latest # 跳过生成工作流的提交,避免循环或不必要的检查 if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '生成blurhash')" steps: - uses: actions/checkout@v3 - name: Validate JSON run: | python ci_scripts/json_linter.py
3. 检查仓库分支保护规则
如果仓库设置了“必须通过指定检查才能合并”,不要把这两个工作流设为必填项——尤其是生成工作流,它只在PR打开时运行一次,新提交后不会再触发,强制必填会导致合并流程卡壳。
之前尝试无效的原因
- 修改触发条件:仅设置打开/重新打开触发,新提交后没有检查运行,GitHub会持续等待
- 合并为单个任务:即便合并,推送新提交后GitHub仍会期望新的检查,状态依旧卡住
- 使用
EndBug/add-and-commit但未指定token:默认可能使用了其他权限的token,或者没解决GitHub等待检查的核心逻辑
内容的提问来源于stack exchange,提问作者smocer
相关产品推荐
相关产品推荐

