如果评论被用户批准,则通过 Github 操作合并 PR

Posted

技术标签:

【中文标题】如果评论被用户批准,则通过 Github 操作合并 PR【英文标题】:Merge PR by Github action if review was approved by a user 【发布时间】:2020-01-09 08:16:06 【问题描述】:

如果其中一位用户(静态固定列表,可以写入工作流配置文件)批准(使用approve 关键字提交审核),是否可以配置 Github 操作工作流以合并拉取请求?我试图在文档中找到它:https://help.github.com/en/articles/workflow-syntax-for-github-actions#on - 我想我可以使用on: [pull_request_review] 触发器进行操作,但文档没有提到如何在yaml 文件中访问事件有效负载,我需要从该有效负载中提取审阅者登录信息。

【问题讨论】:

【参考方案1】:

我在https://help.github.com/en/articles/virtual-environments-for-github-actions#filesystems-on-github-hosted-machines找到这个:

workflow/event.json:触发工作流的 webhook 事件的 POST 负载。 GitHub 会在每次执行操作时重写此操作,以隔离操作之间的文件内容。使用GITHUB_EVENT_PATH 环境变量来访问这个文件。

因此,下一步将弄清楚如何解析 JSON 文件并提取一些稍后步骤可以使用的数据。为此,查看GitHub's setup-dotnet action 可能会很有用。在line 62 of installer.ts 中,他们调用了一个名为core.exportVariable 的函数,正如您所看到的here,导致##[set-env name=NAME;]value 被打印在动作的输出中。我亲自验证过,这会导致名为 NAME 的环境变量自动出现在同一工作流作业的后续步骤中。

现在,我还不知道您是否可以在 GitHub 工作流程的 run 步骤中简单地执行 echo "##[set-env name=NAME;]$VALUE" 并完成这项工作;您可能必须在 Typescript 中编写自定义操作才能访问core.exportVariable。但是,一旦您解析了 JSON,这就是将该信息传递给您工作中后续步骤的一种方式。

【讨论】:

我只是想到了一个更简单的方法:编写一个 Bash 脚本(如果您使用的是 Windows,则为 PowerShell 脚本),它将解析 JSON 文件并决定是否批准拉取请求。如果拉取请求应该被批准,请使用 0 退出代码退出。如果不是,则以非零退出代码退出,这将导致工作流在失败状态下停止。 谢谢,它也适用于 Docker 操作,Github 在 Docker 容器内的 GITHUB_EVENT_PATH 提供事件 JSON 有效负载【参考方案2】:

除了rmunn 的answer,您可能还想保护您的分支:

GitHub Actions: Prevent GitHub Actions from approving pull requests(2022 年 1 月 14 日)

我们引入了一项新策略设置,用于控制 GitHub Actions 是否可以批准拉取请求。 这可以防止用户使用操作来满足“必需的批准”分支保护要求并合并未经其他用户审查的更改。

为防止破坏现有工作流程,Allow GitHub Actions reviews to count towards required approval 默认启用。 但是,组织管理员可以在组织的操作设置下禁用它。

这样,您可以确定仅由用户做出批准,而不是其他操作。

【讨论】:

以上是关于如果评论被用户批准,则通过 Github 操作合并 PR的主要内容,如果未能解决你的问题,请参考以下文章

如何限制谁可以合并到 github repo 上的 master?

批准过程

从单独的列构建视图列

Laravel / Eloquent:对包含批准评论的文章的主题进行迭代

官宣:欧盟批准微软收购 GitHub;2018 JVM 生态报告:Java 8 使用率 79%

自动批准评论插件中的所有评论