【问题标题】:Merge PR by Github action if review was approved by a user如果评论被用户批准,则通过 Github 操作合并 PR
【发布时间】: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 文件中访问事件有效负载,我需要从该有效负载中提取审阅者登录信息。

【问题讨论】:

    标签: github pull-request github-actions


    【解决方案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】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2021-10-27
      相关资源
      最近更新 更多