如果评论被用户批准,则通过 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:对包含批准评论的文章的主题进行迭代