如何将GitHub Actions上游工作流的提交消息传递给下游触发的工作流并同步运行名称?
如何将GitHub Actions上游工作流的提交消息传递给下游触发的工作流并同步运行名称?
当然可以实现!我来一步步教你怎么把上游infra工作流的提交消息传递给下游build工作流,让两者的运行名称保持一致,解决你现在build运行名称只是单调“build”的问题。
核心思路
当build被workflow_run事件触发时,GitHub会把上游infra工作流的所有运行信息都放到github.event.workflow_run上下文中,其中就包含了infra的运行名称(也就是你说的提交消息)。我们只需要拿到这个名称,再调用GitHub的API修改当前build工作流的运行名称就行。
具体配置步骤
1. 修改build工作流文件
把你的build.yml改成下面这样,重点是新增一个同步运行名称的job:
name: build on: workflow_run: workflows: [ infra ] types: [ completed ] branches: [ main ] jobs: sync-run-name: runs-on: ubuntu-latest # 只在infra运行成功时执行,符合你“成功的infra触发build”的需求 if: github.event.workflow_run.conclusion == 'success' steps: - name: 提取上游infra的运行名称 run: | # 从上下文里拿到上游工作流的名称(也就是提交消息) echo "UPSTREAM_NAME=${{ github.event.workflow_run.name }}" >> $GITHUB_ENV - name: 修改当前build的运行名称 uses: actions/github-script@v6 with: script: | # 调用GitHub API更新工作流运行名称 github.rest.actions.updateWorkflowRun({ owner: context.repo.owner, repo: context.repo.repo, run_id: context.runId, name: "${{ env.UPSTREAM_NAME }}" }) # 默认的GITHUB_TOKEN已经有修改工作流名称的权限,不用额外配置 github-token: ${{ secrets.GITHUB_TOKEN }}
2. (可选)确保infra的运行名称确实是提交消息
如果你之前是靠GitHub默认行为让infra用提交消息命名,其实可以主动在infra工作流里加一步明确设置,避免后续默认行为变化:
name: infra on: push: branches: [ main ] jobs: setup: runs-on: ubuntu-latest steps: - name: 设置运行名称为提交消息 uses: actions/github-script@v6 with: script: | github.rest.actions.updateWorkflowRun({ owner: context.repo.owner, repo: context.repo.repo, run_id: context.runId, name: "${{ github.event.head_commit.message }}" }) github-token: ${{ secrets.GITHUB_TOKEN }} # 你的其他infra步骤...
关键说明
- 权限问题:默认的
GITHUB_TOKEN已经拥有actions:write权限,足够修改工作流的运行名称,不需要额外创建个人访问令牌(PAT)。 - 触发时机:我们给
build的job加了if: github.event.workflow_run.conclusion == 'success',确保只有infra运行成功时才会执行build的任务,完全符合你的需求。 - 名称同步时机:这个同步步骤会在
build工作流启动后立刻执行,用户几乎看不到默认的“build”名称,体验更连贯。
备注:内容来源于stack exchange,提问作者Blair Nangle
相关产品推荐
相关产品推荐

