如何为GitHub Actions的Release工作流组合多触发条件?
解决办法
GitHub Actions的on字段不支持直接配置同时满足多个条件的触发规则,需要通过「事件触发+作业级条件判断」的组合方式实现需求,下面提供两种可行方案:
方案一:基于workflow_run触发,配合作业条件判断
将Release工作流改为仅监听Lint、Test、Integration test这三个工作流的完成事件,然后在作业中添加双重判断:一是触发这三个工作流的原事件为符合规则的标签推送,二是三个输出届时指定********************************German「 seventhmh/application Squ类�负责 Else真人 imper原触发事件是符合规则的标签推送,二是这三个工作流全部执行成功。
具体配置如下:
name: Release on: workflow_run: workflows: ["Lint", "Test", "Integration test"] types: [completed] jobs: release: # 仅当三个前置工作流全成功,且原触发事件是符合规则的标签时才执行 if: > github.event.workflow_run.conclusion == 'success' && startsWith(github.event.workflow_run.head_branch, 'refs/tags/v') && matches('^refs/tags/v[0-9]+\\.[0-9]+\\.[0-9]+$', github.event.workflow_run.head_branch) runs-on: ubuntu-latest steps: # 此处编写你的Release步骤,比如拉取代码、创建Release、上传产物等 - name: 拉取代码 uses: actions/checkout@v4 # ...其他需要的步骤
方案二:拆分前置检查与Release执行
如果需要更清晰的流程,可以新增一个「标签推送触发的前置检查工作流」,等三个指定工作流全部完成且成功后,再触发Release工作流:
前置检查工作流(仅标签推送触发)
name: 发布前置检查 on: push: tags: - 'v[0-9].[0-9]+.[0-9]+' jobs: 等待前置工作流完成: runs-on: ubuntu-latest steps: - name: 等待Lint工作流成功 uses: lewagon/wait-on-check-action@v1.3.0 with: ref: ${{ github.ref }} check-name: 'Lint' # 填写Lint工作流中的作业名称 repo-token: ${{ secrets.GITHUB_TOKEN }} wait-interval: 10 - name: 等待Test工作流成功 uses: lewagon/wait-on-check-action@v1.3.0 with: ref: ${{ github.ref }} check-name: 'Test' repo-token: ${{ secrets.GITHUB_TOKEN }} wait-interval: 10 - name: 等待Integration test工作流成功 uses: lewagon/wait-on-check-action@v1.3.0 with: ref: ${{ github.ref }} check-name: 'Integration test' repo-token: ${{ secrets.GITHUB_TOKEN }} wait-interval: 10 - name: 触发Release工作流 uses: benc-uk/workflow-dispatch@v1 with: workflow: Release # 填写你的Release工作流名称 token: ${{ secrets.GITHUB_TOKEN }} ref: ${{ github.ref }}
Release工作流配置
name: Release on: workflow_dispatch: # 仅由前置检查工作流触发 jobs: release: runs-on: ubuntu-latest steps: # 此处编写你的Release步骤 - name: 拉取代码 uses: actions/checkout@v4 # ...其他需要的步骤
关键说明
- 方案一更简洁,无需额外维护工作流,通过事件上下文即可完成判断;方案二流程更直观,适合依赖关系复杂的场景
- 标签推送时,
github.event.workflow_run.head_branch的格式为refs/tags/vx.x.x,因此正则匹配需对应该格式
内容的提问来源于stack exchange,提问作者kozmo
相关产品推荐
相关产品推荐

