仅在PR合并时触发Github操作

时间:2020-03-16 17:04:55

标签: git github github-actions

我有一个github动作yaml文件,如下所示:

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

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

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

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

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

我在docs中找不到类似merged的内容

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

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

有人可以在这里帮助我吗? 我是否可以检查PR是否至少由一位审阅者批准? (我可以启用分支保护,但想知道是否有任何选项可以在github操作中实现)

3 个答案:

答案 0 :(得分:1)

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

尝试对此操作做出反应

on
  pull_request_review:
    types:
      - submitted

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

看到了它的作用

答案 1 :(得分:1)

没有合并请求的事件。

您能获得的最接近的结果是订阅push事件,因为合并的PR总是会向与其合并到的分支创建一个push事件。

如果您只关心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: ...

答案 2 :(得分:1)

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

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

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

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