GitHub Actions workflow_run事件如何动态设置UI工作流显示名称
实现方案
该需求可通过GitHub Actions原生支持的动态运行标题能力实现,无需引入第三方工具,配置方式如下:
- GitHub Actions 专门提供了顶层
run-name字段用于定义每次工作流运行实例的显示标题,字段值支持完整的上下文表达式语法,工作流启动时会自动根据当前运行上下文、事件载荷渲染为对应文本,直接展示在GitHub UI的运行列表、运行详情页。 - 注意区分两个顶层字段:
name:工作流的静态基础名称,展示在仓库的工作流列表页,不会随运行上下文变化run-name:单次运行的动态标题,就是需要修改的UI展示字段
针对当前workflow_run触发场景的配置要点
cd工作流是被release工作流通过workflow_run事件触发的,这时候cd工作流默认上下文中的github.ref_name、github.ref等值指向的是cd工作流监听的master分支,不是触发release的标签,所以不能直接引用这些值,所有上游触发信息都需要从github.event.workflow_run事件载荷中获取:
- 上游工作流触发时的git ref存放在
github.event.workflow_run.ref字段:如果是tag触发,值为refs/tags/标签名;如果是分支触发,值为refs/heads/分支名 - 可以直接在表达式中用内置字符串函数截取需要的版本/分支名,不需要在作业步骤中额外调用API获取
具体配置修改
1. 优化cd.yml配置
修改后的cd.yml核心配置如下,重点是新增run-name字段,同时修复现有配置中tag触发时checkout版本、构建版本号取值错误的问题:
name: cd # 新增动态运行名配置:tag触发显示标签名,分支触发显示分支名 run-name: cd ${{ startsWith(github.event.workflow_run.ref, 'refs/tags/') && replace(github.event.workflow_run.ref, 'refs/tags/', '') || replace(github.event.workflow_run.ref, 'refs/heads/', '') }} on: workflow_run: workflows: [ "ci release" ] types: - completed branch: [ master ] jobs: deploy: name: "deploy to heroku" runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - uses: actions/checkout@v2 with: # 修复原配置tag触发时head_branch为空导致checkout错误的问题 ref: ${{ github.event.workflow_run.head_sha }} - name: Terraform validate run: terraform validate - name: Terraform init - apply run: | cd terraform export HEROKU_API_KEY=${{ secrets.HEROKU_API_KEY }} HEROKU_EMAIL=${{ secrets.HEROKU_EMAIL }} terraform init -backend-config="conn_str=${{ secrets.TERRAFORM_BE }}" # 修复原配置tag触发时版本号取值为空的问题 terraform apply -var build_version=${{ startsWith(github.event.workflow_run.ref, 'refs/tags/') && replace(github.event.workflow_run.ref, 'refs/tags/', '') || replace(github.event.workflow_run.ref, 'refs/heads/', '') }} --auto-approve
配置完成后,推送v0.0.3标签触发流程时,cd工作流的运行标题就会自动显示为cd v0.0.3,如果是分支触发的release流程,会自动显示为对应的分支名。
2. 可选优化:给release工作流也配置动态标题
如果需要release工作流的运行标题也动态显示对应标签,只要在release.yml顶层新增一行run-name配置即可:
name: ci release # 新增:动态显示release对应的标签/分支名 run-name: ci release ${{ github.ref_name }} on: push: tags: - 'v*' # 其余原有配置保持不变
扩展用法
run-name支持引用所有初始上下文字段,可以根据需要拼接任意信息,比如显示触发人、提交信息等:
# 示例:显示为 cd v0.0.3 触发人:xxx 提交信息:initial layout run-name: cd ${{ github.ref_name }} 触发人:${{ github.triggering_actor }} 提交信息:${{ github.event.head_commit.message }}
注意:run-name是在工作流初始化阶段渲染的,无法引用作业步骤中生成的变量,所有取值必须来自工作流启动时就已存在的事件、上下文对象。
内容的提问来源于stack exchange,提问作者Alberto Piñón Formoso
相关产品推荐
相关产品推荐

