我有一个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操作中实现)
答案 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: ...