【问题标题】:Trigger Github Actions only when PR is merged仅在 PR 合并时触发 Github Actions
【发布时间】:2020-06-27 19:34:34
【问题描述】:

我有一个 github 操作 yaml 文件如下:

name: Test deployment
on:
  pull_request:
    branches:
    - master

jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
    - name: Random name
      run: date

当我将 PR 从分支提升到 master 分支时,Github Action 会被触发。因此,我将 YAML 更新为:

name: Test deployment
on:
  pull_request:
    types:
    - closed
    branches:
    - master

现在它在我合并 PR 时触发,而不是在提升它时触发。但是当我关闭 PR 而不合并它时也会触发它。

我没有找到类似merged 的内容,请输入docs

即使我尝试的以下语法也无法按预期工作:

jobs:
  ...
    if: github.event_name == 'pull_request' && github.event.action == 'closed'

有人可以帮我吗? 我是否可以检查 PR 是否得到至少一位审稿人的批准? (我可以启用分支保护,但想知道在 github 操作中是否存在任何选项)

【问题讨论】:

  • 在合并之前你是如何检查 PR 是否被至少一个批准的?

标签: git github github-actions


【解决方案1】:

没有拉请求合并事件。

您可以获得的最接近的事情是订阅push 事件,因为合并的 PR 将始终创建一个推送事件到它被合并到的分支。

如果您只关心master 的 PR,那么您可以指定:

on:
  push:
    branches:
      - master

您可以做的另一件事是单独过滤每个步骤

      - name: Do something
        if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
        run: ...

【讨论】:

  • if: github.event.pull_request.merged 应该足够了。
【解决方案2】:

虽然没有针对拉取请求的特定 merged 类型,但 API response 上有一个 merged 标志。这允许您仅在合并时运行操作,而不是对目标分支的所有推送。

这将允许人们执行以下操作,假设我们想要对任何合并到 main 分支的操作​​运行:

on:
  pull_request:
    branches: 
      - main
    types: [closed]

jobs:
  my-action:
    if: ${{ github.event.pull_request.merged }}
    runs-on: ...

【讨论】:

    【解决方案3】:

    我自己没有尝试过,但我认为它可能会起作用,因为我注意到这是自动合并操作,必须在合并 PR 之前检查 PR 是否被批准。

    尝试对此操作做出反应

    on
      pull_request_review:
        types:
          - submitted
    

    然后从有效载荷中获取名为review.state 的东西,它的值应该是approved。我在这里看到了它https://github.com/pascalgn/automerge-action/blob/135f0bdb927d9807b5446f7ca9ecc2c51de03c4a/lib/api.js#L123

    【讨论】:

      【解决方案4】:

      一旦合并,PR 请求将提交一条消息“Merge pull request ”。然后,您可以将其与您的工作的 if 语句一起使用。

      name: build-on-merge
      
      on:
        push:
          branches: ["master"]
      jobs:
        build-on-merge:
          if: startsWith(github.event.head_commit.message, 'Merge pull request')
        runs-on: ubuntu-latest
        steps:
      

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 2022-10-12
        • 2021-06-08
        • 2022-08-11
        • 2020-12-13
        • 2021-10-05
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多