当拉取请求有特定标签时运行Github Actions

64
阅读了触发工作流程的事件的文档后,我想知道是否可以使用给定的标签名称(如RFR或WIP)运行工作流程。
我知道我们可以在拉取请求被标记时运行工作流程,但没有更多特定标签名称的信息。
on:
  pull_request:
    types: [labeled]

有人以前做过这个吗?

3个回答

105
您可以使用条件表达式来实现在标记拉取请求时运行工作流程。
if: ${{ github.event.label.name == 'label_name' }}

如果您的GitHub Action配置如下所示

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!

每当PR被标记并且仅在标签为bug时运行作业,如果标签是其他任何内容,则跳过。您还可以使用github.event.action == 'labeled'进行额外的检查,但如果您只对pull_request使用types: [ labeled ],则不需要该检查,如上面的配置所示。 注意:仅供您参考,关于标记PR的github事件具有以下信息(为简洁起见删除了不相关的数据)。
"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"
    }
}

GitHub Actions 文档 关于条件表达式的部分可以在这里找到。


4
关于多个标签的问题。例如,如果我的 PR 有两个标签,比如 bugsecurity,这种方法可行吗? - Markus
1
@Markus 这将会触发每个标签事件的工作流,因此在您有多个标签时也可以使用。 - Madhu Bhat
11
很遗憾,我们只能在标记事件上运行。我希望它可以在标签仍然分配给PR的情况下继续运行操作。 - Bozhao
63
您可以通过检查 github.event.pull_request.labels 字段来实现此操作。以下是一个简化的示例:if: contains(github.event.pull_request.labels.*.name, '<label_name>')。您还需要确保在 pull_request.types 中指定 "labeled"、"opened"、"synchronize" 和 "reopened"。 - Stephen Young
4
你应该将那部分内容包含在答案中。 - Saiansh Singh
显示剩余3条评论

25
根据此评论,需要检查的条件为:
   if: contains(github.event.pull_request.labels.*.name, '<label_name>')

1
如果您在“pull_request”工作流程中添加了此内容,则不会捕获在提出PR后添加的标签。在这种情况下,需要关闭并重新打开PR或只需创建新的PR。 - vishwarajanand
这取决于你的触发器。如果你的工作流中没有一个标记为PR labeled的触发器,那么它就不会起作用。你需要添加以下内容:on: pull_request: types: [ labeled ] @vishwarajanand - undefined

6

我不需要使用类型来使其工作,就像this answer一样,我已经通过这个条件让它工作了:

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

这样,无论何时有一个目标分支为main的拉取请求,工作流程ExampleWorkflow都会被触发,如果该拉取请求没有标签example-label,则作业ExampleJob将被跳过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接