仅在合并PR时触发Github操作



我有一个github-actions-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时。但当我关闭PR而不合并它时,它也会被触发。

我在文档中找不到类似merged类型的内容

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

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

有人能帮我吗?我是否可以检查PR是否至少由一名评审员批准?(我可以启用分支保护,但想知道在github操作中是否存在这样做的选项(

没有拉请求合并事件。

你能得到的最接近的事情是订阅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: ...

(编辑,截至2022年(根据GitHub文档,现在应该可以通过:

on:
pull_request:
types:
- closed
jobs:
if_merged:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- run: |
echo The PR was merged

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

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

on:
pull_request:
branches: 
- main
types: [closed]
jobs:
my-action:
if: ${{ github.event.pull_request.merged }}
runs-on: ...

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

尝试对此动作做出反应

on
pull_request_review:
types:
- submitted

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

查看github操作文档,似乎有解决方案,https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-您的工作流程-拉入请求-目标-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

所以,我刚刚尝试了所提出的解决方案,看到输出时我看到了一些奇怪的东西:工作流被触发,但我看到它在被合并的分支上运行,而不是在被合并到的分支上(在我的情况下是main(。
这有点令人不安,因为我的工作流程正在构建和推送Docker图像。如果主上有而不是正在合并的分支上的更改,该怎么办?在我看来,被推送的图片可能并不是我所期望的那样??
我的工作流运行如下:https://github.com/Axual/ksml/actions-您可以看到一个工作流在main上运行(由push触发(,另一个在分支上运行。
有没有一种方法可以在PR合并或类似的推送上运行工作流?

谷歌上仍然出现一个老问题。根据这里的Github文档:https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow when-a-pull请求-i-已批准

这就是它的做法:

on:
pull_request_review:
types: [submitted]
jobs:
approved:
if: github.event.review.state == 'approved'
runs-on: ubuntu-latest
steps:
- run: echo "This PR was approved"

合并后,PR请求将提交并显示消息"Merge pull request<您的PR等>'。然后,您可以将其与工作的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:

最新更新