如何配置GitHub Actions使tests作业仅在直接推送而非合并时运行?
解决方案
可以通过结合事件类型与GitHub上下文字段,精准控制tests作业的运行时机,满足直接推送任何分支时运行,合并操作时不运行的需求,作业级条件配置如下:
jobs: tests: runs-on: ubuntu-latest if: | (github.event_name == 'push' && !exists(github.event.push.merge_commit_sha)) || (github.event_name == 'pull_request' && github.event.pull_request.merged == false) steps: - uses: actions/checkout@v4 # 你的其他测试步骤 build: runs-on: ubuntu-latest needs: tests steps: # 你的构建步骤
条件逻辑说明
- push事件场景:通过
!exists(github.event.push.merge_commit_sha)判断是否为普通直接推送——只有当推送不是合并操作产生的(无合并commit SHA)时,才运行tests。这既覆盖了所有分支的直接代码推送(包括develop分支),又排除了PR合并或手动分支合并后推送的情况。 - pull_request事件场景:通过
github.event.pull_request.merged == false确保tests仅在PR打开、更新时运行,PR合并完成时不触发,避免重复执行测试。
配置后效果:
- 直接推送任意分支(含develop):tests正常运行
- PR合并到任意分支(含develop):tests不运行
- PR打开或更新代码:tests正常运行(若工作流监听pull_request事件)
- 本地合并分支后推送:tests不运行(符合分支间合并操作不执行测试的需求)
内容的提问来源于stack exchange,提问作者k''
相关产品推荐
相关产品推荐

