触发有关拉取请求批准和路径的 GitHub 操作

Trigger a GitHub action on pull request approval and path

提问人:fuzzi 提问时间:12/22/2021 更新时间:1/20/2023 访问量:8964

问:

我想构建一个在拉取请求 (PR) 批准时触发的 GitHub 操作,但前提是 PR 包含对特定路径的修改。

目前,我有以下实现:

on:
  pull_request_review:
    types: [submitted]
    paths: ['mypath/**']

jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v2
      - name: job name
        if: github.event.review.state == 'approved'

[参考:https://github.community/t/github-actions-manual-trigger-approvals]

但是,作业在审批时触发,并且似乎忽略了该路径。无论 PR 中修改了哪些文件,生成都会在任何 Approval 上运行。build

是否可能仅在 PR 修改特定路径并获得批准时触发 GitHub 操作?

github-actions

评论

1赞 GuiFalourd 12/22/2021
触发条件作为 OR 而不是 AND。因此,您的工作流将在提交 时触发,或者当更新的路径是通知的路径时触发。如果要同时检查两者,则必须单独进行。例如,首先在 ON 触发器中检查已提交的内容,然后在作业步骤中检查文件夹路径(例如,使用此 paths-changes-filter 操作)。ONpull_request_review
0赞 fuzzi 12/22/2021
感谢您@GuiFalourd的回答。

答:

2赞 fuzzi 12/22/2021 #1

我找到了一个解决方案,改用 GitHub 标签,而不是文件路径。

我实现了一个 GitHub Action,用于根据更新的文件路径自动向 PR 添加标签。 (https://github.com/actions/labeler)

然后,我修改了现有的 GH 操作以检查标签值。我现在的情况是:

if: github.event.label.name == 'project' && github.event.review.state == 'approved'
9赞 GuiFalourd 12/22/2021 #2

我知道使用另一种带有标签的解决方案找到了替代方案,但如果有人想解决保留原始前提的问题问题,这是我的贡献:fuzzi

上下文

触发条件的工作方式为,而不是 。因此,在问题示例中,当 a 为 OR 时,当其中一个更新的文件是通知的文件时,工作流将触发。ONORANDpull_request_reviewsubmittedpath

解决方法

仅通过工作流级别字段还无法检查这两个条件(还不能?on

因此,如果要检查这两个条件,则必须单独进行。

解决方案可能是先检查触发器中的 PR,然后在作业步骤中检查文件夹路径。submittedON

下面是使用 paths-changes-filter 操作的上述解决方案的示例:

on:
  pull_request_review:
    types: [submitted]

jobs:
  build:
    runs-on: self-hosted #or any other runner
    steps:
      - uses: actions/checkout@v2
      - uses: dorny/paths-filter@v2
        id: changes
        with:
          filters: |
             mypath:
              - 'mypath/**'
      # run only if some file in 'src' folder was changed
      - if: steps.changes.outputs.mypath == 'true' && github.event.review.state == 'approved'
        run: ...

评论

0赞 Irfan Pathan 9/29/2022
这个 dorny/paths-filter@v2 不适用于pull_request_review事件,它仅适用于 pull_request / push 事件