Skip to main content

关于依赖关系图

您可以使用依赖关系图来识别项目的所有依赖项。 依赖关系图支持一系列流行的软件包生态系统。

关于依赖关系图

依赖项关系图是存储在存储库中的清单和锁定文件以及使用 依赖项提交 API(beta 版本)提交给存储库的任何依赖项的摘要。 对于每个存储库,它显示:

  • 依赖项、它依赖的生态系统和包
  • 依赖项,是指依赖于它的存储库和包

对于每个依赖项,可以看到许可证信息和漏洞严重程度。 还可以使用搜索栏搜索特定依赖项。 依赖项按漏洞严重程度自动排序。

向 GitHub Enterprise Cloud 推送提交以更改支持的清单或锁定文件或将其添加到默认分支时,依赖项关系图会自动更新。此外,当有人向某个依赖项的存储库推送更改时,该关系图也会更新。有关支持的生态系统和清单文件的信息,请参阅下面的“支持的包生态系统”。

此外,可以使用 依赖项提交 API(beta 版本)从所选的包管理器或生态系统提交依赖项,即使依赖项关系图不支持使用该生态系统进行清单或锁定文件分析也是如此。 使用 依赖项提交 API(beta 版本)提交到项目的依赖项将显示用于提交的检测器以及提交时间。有关 依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。

当创建包含针对默认分支的依赖项更改的拉取请求时,GitHub 使用依赖关系图向拉取请求添加依赖项审查。 它们指示依赖项是否包含漏洞,如果是,则指示已修复漏洞的依赖项版本。 有关详细信息,请参阅“关于依赖项评审”。

如果至少具有对存储库的读取访问权限,则可以通过 GitHub UI 或 GitHub REST API,将存储库的依赖项关系图导出为与 SPDX 兼容的软件物料清单 (SBOM)。 有关详细信息,请参阅“导出存储库的软件物料清单”。

依赖关系图可用性

依赖项关系图是为所有公共存储库自动生成的。 可以选择为分支和专用存储库启用它。 有关详细信息,请参阅“管理存储库的安全和分析设置”。

存储库管理员还可以为私有存储库设置依赖项关系图。 有关详细信息,请参阅“配置依赖项关系图”。

包含的依赖项

依赖项关系图包含支持的生态系统中的清单和锁定文件(或等效文件)中详述的存储库的所有依赖项,以及使用 依赖项提交 API(beta 版本)提交的任何依赖项。 这包括:

  • 直接依赖项,清单或锁定文件中显式定义或者是使用 依赖项提交 API(beta 版本)提交的直接依赖项
  • 这些直接依赖项的间接依赖项,也称为过渡依赖项或子依赖项

仅当在锁定文件中定义间接依赖项,或使用 依赖项提交 API(beta 版本)提交时,依赖项关系图才会标识间接依赖项。 对于最可靠的依赖关系图, 您应该使用锁定文件(或其等效项),因为它们准确地定义了您当前使用的直接和间接依赖项版本。 如果您使用锁定文件,还要确保仓库的所有贡献者都使用相同的版本,这样更便于您 测试和调试代码。 如果生态系统没有锁定文件,则可以使用预创建操作来解析许多生态系统的可传递依赖项。 有关详细信息,请参阅“使用依赖项提交 API”。

有关 GitHub Enterprise Cloud 如何帮助你了解环境中的依赖项的详细信息,请参阅“关于供应链安全性”。

包含的依赖关系

对于公共仓库,仅报告依赖于它或它发布的包的公共仓库。 对于私有仓库,不报告此信息。

使用依赖关系图

您可以使用依赖关系图:

支持的包生态系统

建议的格式明确定义哪些版本用于所有直接和所有间接依赖项。 如果使用这些格式,依赖项关系图会更准确。 它还反映当前的生成设置,并且使依赖项关系图能够报告直接和间接依赖项中的漏洞。从清单文件(或等效文件)推断的间接依赖项将不包括在不安全的依赖项检查中。

程序包管理器语言推荐格式所有支持的格式
CargoRustCargo.lockCargo.tomlCargo.lock
编辑器PHPcomposer.lockcomposer.jsoncomposer.lock
NuGet.NET 语言(C#、F#、VB)、C++.csproj.vbproj.nuspec.vcxproj.fsproj.csproj.vbproj.nuspec.vcxproj.fsprojpackages.config
GitHub Actions 工作流程YAML.yml.yaml.yml.yaml
Go 模块Gogo.modgo.mod
MavenJava、Scalapom.xmlpom.xml
npmJavaScriptpackage-lock.jsonpackage-lock.jsonpackage.json
pipPythonrequirements.txtpipfile.lockrequirements.txtpipfilepipfile.locksetup.py
pnpmJavaScriptpnpm-lock.yamlpackage.jsonpnpm-lock.yaml
酒馆Dartpubspec.lockpubspec.yamlpubspec.lock
Python PoetryPythonpoetry.lockpoetry.lockpyproject.toml
RubyGemsRubyGemfile.lockGemfile.lockGemfile*.gemspec
Swift 包管理器SwiftPackage.resolvedPackage.resolved
YarnJavaScriptyarn.lockpackage.jsonyarn.lock

注意:

  • 如果你在 setup.py 文件中列出你的 Python 依赖项,我们可能无法分析和列出你项目中的每个依赖项。

  • GitHub Actions 工作流必须位于要识别为清单的存储库的 .github/workflows/ 目录中。 使用 jobs[*].steps[*].usesjobs.<job_id>.uses 语法引用的任何操作或工作流都将被分析为依赖项。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。

  • Dependabot 只会为使用语义版本控制的易受攻击的 GitHub Actions 创建 Dependabot alerts。 你将不会收到有关使用 SHA 版本控制的易受攻击操作的警报。 如果将 GitHub Actions 与 SHA 版本控制配合使用,建议为存储库或组织启用 Dependabot version updates 以保留更新到最新版本的操作。 有关详细信息,请参阅“关于 Dependabot 警报”和“关于 Dependabot 版本更新”。

可以使用 依赖项提交 API(beta 版本)将所选的包管理器或生态系统中的依赖项添加到依赖项关系图,即使生态系统不在上述受支持的生态系统列表中也是如此。 使用 依赖项提交 API(beta 版本)提交到项目的依赖项将显示用于提交的检测器以及提交时间。

你只会收到来自 GitHub Advisory Database 支持的生态系统之一的依赖项的 Dependabot alerts。 有关 依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。

其他阅读材料