【问题标题】:How can I check if Dependabot is enabled for a Repo using Github APIs?如何使用 Github API 检查是否为 Repo 启用了 Dependabot?
【发布时间】:2022-02-22 18:16:48
【问题描述】:

我已经浏览过 Github Rest API v3 和 Github GraphQL API v4,但我无法找到资源/端点来检查是否通过 API 启用了依赖机器人? 我浏览了大量文档,但找不到任何有用的东西。 有人可以指点我正确的文档或告诉我要使用哪个资源吗? 谢谢!

【问题讨论】:

  • 有一个 dependabot API docs 可能会有所帮助,但它在今天(2021 年 8 月 3 日)已被弃用。但是,一种解决方法是使用 GET 到 api.github.com/repos/name/repo/contents/fileNameOrPath 检查 dependabot.yml 文件是否存在于您的存储库中(reference)。

标签: github automation github-actions github-api github-graphql


【解决方案1】:

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

  • 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 Reference 列出了对 enabledisable 功能的请求,但没有获取给定 repo 的功能的当前状态,我还没有能够令人满意地找到如何获取来自 REST 或 GraphQL API 的信息。

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

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

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

同样,这与安全更新不同,但根据您的政策/实践,它可能是一对一的关系。对 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
        }
    }
}

【讨论】:

  • 我很欣赏这个答案的彻底性。我真的希望有一种方法可以通过 graphql api 获取警报的状态。
【解决方案2】:

dependabot API docs 本来可以提供帮助,但它已于 2021 年 8 月 3 日被弃用。

但是,一种解决方法是检查您的存储库中是否存在 dependabot.yml 文件,或者不使用对 api.github.com/repos/name/repo/contents/fileNameOrPathGET 请求。

Reference about the dependabot.yml file

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多