Github Actions工作流依赖配置后未触发,请求排查
你遇到的Build工作流未触发的问题,可能由以下几个配置或设置问题导致,按优先级排查:
1. Tests工作流的分支排除规则与注释不符(最可能的直接原因)
你的Tests工作流注释标注的是# excludes master,但实际配置写的是- '!main':
on: push: branches: - '**' # matches every branch - '!main' # excludes master
如果你的仓库默认分支是master而非main,这个配置不会排除master分支,反而会排除main分支。若你在master分支推送代码,Tests工作流会运行,但如果你的预期是Tests不在master运行,就会出现“Tests运行了但Build没触发”的误解;反之,若你在main分支推送,Tests不会运行,Build自然也不会触发。
解决方法:将排除规则改为与实际分支一致,比如仓库默认分支是master的话,修改为:
- '!master'
2. GitHub Actions分支匹配的优先级逻辑
虽然你当前的分支规则顺序(先包含所有**,再排除指定分支)是正确的,但需要确认:GitHub Actions的分支排除规则(!开头)会覆盖包含规则,若你有其他分支匹配冲突,也可能导致Tests工作流未按预期触发,进而影响Build。
3. workflow_run事件的触发条件未满足
Build工作流配置的types: completed要求Tests工作流必须完成运行(成功或失败状态均符合,被取消或跳过的状态不属于completed),只有Tests工作流进入completed状态时,Build才会触发。
排查方法:在仓库的Actions页面查看Tests工作流的运行状态,确认它确实完成了。
4. 仓库Actions权限限制
若仓库的Workflow权限设置过低,可能导致无法触发workflow_run事件:
- 进入仓库的「Settings」→「Actions」→「General」
- 检查「Workflow permissions」是否设置为「Read and write permissions」,至少要保证有读取工作流运行信息的权限。
5. 工作流名称匹配问题
Build工作流中workflows: ['Tests']必须与Tests工作流的name: Tests完全一致,包括大小写、空格和特殊字符。如果名称存在差异(比如写成test或Tests Workflow),会导致无法匹配触发源。
6. 工作流文件的位置与格式错误
确保两个工作流文件都放在仓库的.github/workflows/目录下,且文件后缀为.yml或.yaml。如果文件位置错误或格式不被识别,GitHub不会加载该工作流,自然无法触发。
内容的提问来源于stack exchange,提问作者Anuar Mukatov

