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 时master,Github 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)
没有 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)
小智 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
小智 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)