如何使用 Github API 检查是否为 Repo 启用了 Dependabot?

How can I check if Dependabot is enabled for a Repo using Github APIs?

我已经浏览了 Github Rest API v3 和 Github GraphQL API v4,但我找不到要检查的 resource/endpoint如果通过 API 启用 dependabot? 我浏览了大量文档,但找不到任何有用的信息。 有人可以指点我正确的文件或告诉我使用哪个资源吗? 谢谢!

有一个 dependabot API docs 可以提供帮助,但已于 2021 年 8 月 3 日弃用。

但是,解决方法是使用对 api.github.com/repos/name/repo/contents/fileNameOrPath.

GET 请求来检查 dependabot.yml 文件是否存在于您的存储库中

Reference about the dependabot.yml file

现在 Dependabot 已合并到 GitHub,除了依赖关系图本身之外,还可以启用三个不同的功能:两个在设置的安全和分析部分,最后一个在给定 GitHub 存储库的 Insights 选项卡的依赖关系图部分:

  • Dependabot 警报:是否会生成安全警报?
  • Dependabot 安全更新:是否会因发现易受攻击的依赖项而生成拉取请求?
  • Dependabot 版本更新:是否会在新版本的依赖项可用时生成拉取请求?

(所有都需要依赖图也被启用——并且一个 repo 至少有一个 supported package ecosystem 文件)

正在检查 Dependabot 警报是否已启用

根据 GitHub REST API Reference,您可以在以下端点通过 GitHub REST API 检查是否启用了 Dependabot 警报: https://api.github.com/repos/{owner}/{repo}/vulnerability-alerts

204 响应确认该功能已启用,404 表示未启用。

正在检查是否启用了 Dependabot 安全更新

奇怪的是,GitHub REST API 参考列出了对 enable or disable 功能的请求,但没有列出给定回购的功能的当前状态,我还没有能够令人满意地找到如何从 REST 或 GraphQL 获取该信息 API.

GuiFalourd 的回答提到使用 GraphQL API 检查是否存在 .github/dependabot.yml 文件。不幸的是,这与安全更新不是一对一的关系:该文件可能在未启用安全更新的情况下存在,或者在启用安全更新时可能不存在。 dependabot.yml文件用于version updates,两者有关联但不是一回事。

您始终可以使用 REST API enable security updates 请求来确保该功能已启用,但这与查询其当前状态以获取存储库完全不同。如果有人确实发现了一种无需页面抓取即可执行此操作的方法,或者如果 GitHub 增加了将来检查的功能,请告诉我!

正在检查是否启用了 Dependabot 版本更新

同样,这与安全更新不同,但根据您的 policy/practices,这可能是一对一的关系。针对 Graph 端点 https://api.github.com/graphql

使用如下内容

查询

{
    repository(name: "{repo}", owner: "{owner}") {
        object(expression: "HEAD:.github/") {
            ... on Tree {
                entries {
                    name
                }
            }
        }
    }
}

如果文件存在则响应:

{
    "data": {
        "repository": {
            "object": {
                "entries": [
                    {
                        "name": "dependabot.yml"
                    }
                ]
            }
        }
    }
}

文件不存在时的响应:

{
    "data": {
        "repository": {
            "object": null
        }
    }
}

@epopisces 的回答很中肯,我也在找同样的东西。现在补充一下他说的。可以通过 GET 请求 (GET /repos/{owner}/{repo}) 到一个特定的 repo 检查 Dependabot 安全更新的状态,它可以有安全和分析标签作为响应(只有当我们有高级安全许可证时)。还没有其他方法可以通过 API.

了解状态

https://docs.github.com/en/rest/reference/repos#get-a-repository