检测直接推送到 master w/GitHub 操作

Detect direct pushes to master w/GitHub Actions

我们目前有一个 GitHub 存储库,其中我们的 master 分支受到除管理员之外的所有人的保护,管理员可以提交并直接推送到分支,而无需先打开拉取请求。我们正在寻找一种方法,在管理员直接提交到 master 时随时发送 Slack 通知,以提醒人们注意分支保护被覆盖的事实。这可能是由于极端情况而故意发生的,或者最坏的情况是错误发生(需要解决)。

这似乎可以结合 GitHub Slack action, the if key on the job/step definition, and ideally some piece of information from the push 事件 JSON。

最后一部分是我卡住的地方:我没有看到使用 push 事件中包含的数据来区分一次性提交的明显方法违反我们的分支保护政策和 normal/compliant 拉取请求.

有人知道这是否可行吗?也许我应该将此工作流程附加到另一个事件,这会给我提供区分差异和启动 Slack 通知所需的信息?

一般来说,使用GitHub Actions 做这种通知是有问题的,因为用户可以简单地删除或中和报告这个的代码,然后推送到主分支。使用的 Actions 工作流将作为该提交的一部分推送到存储库中,因此这不是一个有效的控制。

您可能希望使用 webhook 将此事实通知服务,然后查看 HEAD 提交,解析提交消息以提取 PR 编号,并验证第二个父级commit 的 head 与 PR 的 head 相同。请注意,如果您使用挤压合并,这将不起作用,因为没有简单的方法来验证挤压合并创建的提交是否与创建它的分支创建的提交相同。