仅在PR合并时触发Github操作

wi3ka0sx  于 2023-01-01  发布在  Git
关注(0)|答案(6)|浏览(217)

我有一个github actions 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而不合并它时触发。
我在文档中没有找到类似merged类型的内容
甚至我尝试的以下语法也不能按预期工作:

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

有谁能帮我一下吗?我可以检查一下PR是否至少被一个审阅者批准吗?(我可以启用分支保护,但想知道是否有任何选项可以在github操作中启用)

wbgh16ku

wbgh16ku1#

没有合并拉取请求事件。
最接近的方法是订阅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: ...

(Edit,截至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
e5njpo68

e5njpo682#

虽然拉取请求没有特定的merged类型,但是在API响应上有一个merged标志,这允许您只在合并时运行操作,而不是将所有操作都推送到目标分支。
假设我们想要对main分支的任何合并执行一个操作,这将允许用户执行以下操作:

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

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

92vpleto3#

我还没有尝试过,但我认为它可能会工作,因为我注意到这是自动合并行动,必须检查如果公关是批准之前,它合并它。
尝试对此操作作出React

on
  pull_request_review:
    types:
      - submitted

然后从负载中获取名为review.state的内容,其值应为approved。我在www.example.com中看到了它的实际应用https://github.com/pascalgn/automerge-action/blob/135f0bdb927d9807b5446f7ca9ecc2c51de03c4a/lib/api.js#L123

nhjlsmyf

nhjlsmyf4#

因此,我刚刚尝试了建议的解决方案,并查看输出,我看到一些奇怪的东西:工作流被触发,但我看到它 * 在被合并的分支上 * 运行,而不是在被合并的分支上(在我的例子中是main)。
这有点令人不安,因为我的工作流程是构建和推送Docker图像。如果主节点上的更改 * 不是 * 正在合并的分支上的更改,该怎么办?在我看来,正在推送的图像可能并不完全是我所期望的?
我的工作流运行在这里:https://github.com/Axual/ksml/actions-您可以看到一个工作流在main上运行(由push触发),另一个在分支上运行。
是否有一种方法可以在PR合并产生的推送上运行工作流,或者类似的方法?

368yc8dk

368yc8dk5#

Old question still popping up on Google. As per Github documentation found here: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-when-a-pull-request-is-approved
这是怎么做到的:

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"
ac1kyiln

ac1kyiln6#

一旦合并了一个PR请求,它将提交一条消息“合并拉式请求〈您的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:

相关问题