如何在Github Action的条件中检查标签

27

假设我有一个像这样的 Github Action:

name: My Action

on:
  pull_request:
    types:
      - closed

jobs:
  myjob:
    runs-on: ubuntu-latest
    name: Test
    if: github.event.pull_request.merged && XXX

我希望在这里设置一个条件来测试标签是否存在。

根据文档,使用contains( github.event.pull_request.labels, 'my_label')似乎不太合适,因为它是字典而不是数组。

有没有其他解决方法呢?


1
你确定它不起作用吗?pull_request webhook中的labels属性是一个数组。 - smac89
1
确实,但是这是一个字典数组。我终于可以使用 * 操作符了,并且它有效。 - Denis Rouzaud
1
我想强调的是,全新的工作流程很可能不适用于已经存在的PR。因此,在基于PR设置操作时,对于非标准类型(如“labeled”等),请使用新的PR进行测试。 - Alex Skrypnyk
2个回答

67

终于找到它了:

包含( github.event.pull_request.labels.*.name, 'My Label')


它似乎不再起作用了。有人有替代方案吗? - Deimosfr
7
这仍然有效,但请注意,如果您的操作具有 on: [pull_request],则标签需要在创建拉取请求时存在,而不是之后添加,否则您的 GitHub Action 将不会重新运行。默认的触发器是 openedsynchronizereopened :https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request - jebeaudet
6
补充@jebeaudet的评论:如果你只是将类型 labeled 添加到类型列表中,而不使用默认触发器,那么标签就不需要存在。 - J. S.

1

我从Denis Rouzaud的答案中获得了灵感,并将其应用于问题。它非常有效,帮助我管理由外部系统(使用API)创建的问题的项目自动化:

jobs:
  issue_opened:
    name: issue_opened
    runs-on: ubuntu-latest
    if: |
      contains(github.event.issue.labels.*.name, '<My first label>') ||
      contains(github.event.issue.labels.*.name, '<My second label>')

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