我有一个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: