仅在 PR 合并时触发 Github Actions

Sri*_*rma 5 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

Run Code Online (Sandbox Code Playgroud)

当我从一个分支到另一个分支提出 PR 时masterGithub Action会被触发。所以,我将我的 YAML 更新为:

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

Run Code Online (Sandbox Code Playgroud)

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

merged文档中找不到任何类似类型的东西

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

jobs:
  ...
    if: github.event_name == 'pull_request' && github.event.action == 'closed'
Run Code Online (Sandbox Code Playgroud)

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

小智 42

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

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

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

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

Run Code Online (Sandbox Code Playgroud)

  • 今天的文档在这里确认了这一点,请参阅:https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-your-workflow-when-a-pull-request -合并 (3认同)

Mic*_*ker 9

没有 pull-request-merged 事件。

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

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

on:
  push:
    branches:
      - master
Run Code Online (Sandbox Code Playgroud)

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

      - name: Do something
        if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
        run: ...
Run Code Online (Sandbox Code Playgroud)

  • `if: github.event.pull_request.merged` 应该足够了。 (22认同)

小智 8

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

尝试对此动作做出反应

on
  pull_request_review:
    types:
      - submitted
Run Code Online (Sandbox Code Playgroud)

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

  • 我不明白为什么OP选择这个答案作为公认的答案。 (3认同)

小智 5

检查github操作文档,似乎有一个解决方案, https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-your-workflow-when-a-拉请求合并-1

on:
  pull_request_target:
    types:
      - closed

jobs:
  if_merged:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
    - run: |
        echo The PR was merged
Run Code Online (Sandbox Code Playgroud)