在 GitHub Action 中获取批准状态

9

当标签被添加时,我有一个触发操作。

pull_request:types:[labeled]

作业应该有条件运行,仅在拉取请求获得批准(存在一个或多个批准)以及另一个工作正常的条件下才能运行:

jobs:
  build:
    if: ${{ (something == 'approved') && (contains(github.event.pull_request.labels.*.name, 'Deployed for QA')) }}

在上述条件中,我可以使用什么属性代替“something”?
2个回答

10

您可以在其他条件的基础上使用github.event.review.state == 'approved' 来进行判断。

实际上,这个建议来自于 LeadingMoominExpert ,是可能解决方案的一部分。

测试

我尝试了按照 Dan Cook 的问题所建议的实现方式,使用pull_request: types: [labeled],但它没有起作用。

问题是因为 pull_request 事件的labeled状态发生时,$GITHUB_CONTEXT 中并没有填充github.event.review.state字段,因此该值将为null,并且条件将返回false

为了使其工作,我不得不将工作流触发器on条件更改为pull_request_review: types: [submitted]而不是pull_request: types: [labeled]

但行为并不完全符合预期。

在这种情况下,只有当有人提交评论,且拉取请求状态已被批准且已标记为期望标签时,工作流作业才会执行。

要检查每个事件的行为,可以尝试使用此实现

name: PR approved and labeled

on:
  pull_request:
    types: [labeled]
  pull_request_review:
    types: [submitted]

jobs:
  build:
    runs-on: ubuntu-latest
    if: ${{ (github.event.review.state == 'approved') && (contains(github.event.pull_request.labels.*.name, 'test')) }}
    steps:
      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJSON(github) }}
        run: echo "$GITHUB_CONTEXT"
      - run: echo ${{ github.event.review.state }}

您会发现,添加一个标签(在此情况下包含test)不会执行作业,但是提交批准此PR的审核,设置期望的标签后将运行它。

结论

Dan,您想要实现的目标使用pull_request: types: [labeled]事件目前还不可能。上面的示例是一个解决方法,但可能并不完全符合您的期望。


看起来这就是我们能够实现的最佳方案,尽管它并不能解决真正的问题... - Kemal Cengiz

1
您可以使用 if: github.event.review.state == 'approved' 与其他条件一起使用。

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