【问题标题】:Get approval status in GitHub action在 GitHub 操作中获取批准状态
【发布时间】:2021-10-19 01:48:45
【问题描述】:

我有一个在添加标签时触发的操作。

pull_request: types: [labeled]

作业应该有条件地运行,只有当拉取请求被批准(有一个或多个批准)以及另一个运行良好的条件时:

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

我可以使用什么属性来代替上述条件中的“某物”?

【问题讨论】:

    标签: github-actions


    【解决方案1】:

    您可以使用 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] 事件,您想要实现的目标(还没有?)。

    上面的示例是一种解决方法,但可能与您期望的不完全一致。

    【讨论】:

      【解决方案2】:

      您可以使用if: github.event.review.state == 'approved' 以及您的其他情况。

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2021-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        相关资源
        最近更新 更多