您可以使用 if: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] 事件,您想要实现的目标(还没有?)。
上面的示例是一种解决方法,但可能与您期望的不完全一致。