当拉取请求具有特定标签时运行 Github 操作

Sam*_*uel 13 yaml github github-actions

在阅读了触发工作流事件的文档后,我想知道是否可以使用给定的标签名称运行工作流,例如 RFR 或 WIP。

我知道我们可以在拉取请求被标记时运行一个工作流,但是对于特定的标签名称没有更多内容:

on:
  pull_request:
    types: [labeled]
Run Code Online (Sandbox Code Playgroud)

以前有人这样做过吗?

noa*_*oah 30

根据此评论,要检查的条件是:

   if: contains(github.event.pull_request.labels.*.name, '<label_name>')
Run Code Online (Sandbox Code Playgroud)


Mad*_*hat 21

您可以使用条件表达式来实现在标记拉取请求时运行工作流

if: ${{ github.event.label.name == 'label_name' }}
Run Code Online (Sandbox Code Playgroud)

因此,如果您的 GitHub 操作配置如下

name: CI

on:
  pull_request:
    types: [ labeled ]

jobs:
  build:
    if: ${{ github.event.label.name == 'bug' }}
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Run a one-line script
      run: echo Hello, world!
Run Code Online (Sandbox Code Playgroud)

它会在 PR 被标记时触发工作流,并且仅当标签是时才运行作业bug如果标签是其他任何东西,它将跳过。您还可以将其github.event.action == 'labeled'用作额外检查,但如果您只types: [ labeled ]pull_request上面的配置中显示的内容进行检查,则不需要这样做。

注意:仅供参考,github 事件有以下信息(为简洁起见,删除了不相关的数据)关于标记 PR 时的标签

"event": {
    "action": "labeled",
    "label": {
      "color": "d73a4a",
      "default": true,
      "description": "Something isn't working",
      "id": 1519136641,
      "name": "bug",
      "node_id": "abcd",
      "url": "https://api.github.com/repos/owner/repo/labels/bug"
    }
}
Run Code Online (Sandbox Code Playgroud)

关于条件表达式的GitHub 操作文档这里

  • @Bozhao您可以通过检查`github.event.pull_request.labels`字段来做到这一点。这是一个简化的示例:`if: contains(github.event.pull_request.labels.*.name, '&lt;label_name&gt;')`。您还需要确保在 `pull_request.types` 中指定“labeled”、“opened”、“synchronize”和“reopened” (68认同)
  • 太糟糕了,我们只能在标签事件上运行。我希望只要标签仍然分配给 PR&gt; 就可以继续运行该操作 (5认同)
  • @StephenYoung 你应该将其作为答案。 (4认同)
  • 什么是多个标签。例如,如果我的 PR 有两个标签,例如。“错误”和“安全”。这种方法行得通吗? (3认同)

小智 8

我不需要有类型labeled来使其工作,就像这个答案一样,我设法让它在这种情况下工作:

name: ExampleWorkflow
on:  
  pull_request:
    branches:
      - main
jobs:
  ExampleJob:
    if: contains(github.event.pull_request.labels.*.name, 'example-label')
Run Code Online (Sandbox Code Playgroud)

这样,ExampleWorkflow任何带有目标分支的拉取请求都会触发工作流程,如果 PR 没有标签,则main作业将被跳过ExampleJobexample-label