您可以在其他条件的基础上使用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]
事件目前还不可能。上面的示例是一个解决方法,但可能并不完全符合您的期望。