关于依赖关系图
依赖项关系图是存储在存储库 中的清单和锁定文件的摘要,以及所有提交给使用依赖项提交 API(beta 版) 的存储库的依赖关系。 对于每个存储库,它显示:
- 依赖项、它依赖的生态系统和包
- 依赖项、依赖于它的仓库和包
向 GitHub 推送提交以更改支持的清单或锁定文件或将其添加到默认分支时,依赖项关系图会自动更新。此外,当有人向某个依赖项的存储库推送更改时,该关系图也会更新。有关支持的生态系统和清单文件的信息,请参阅下面的“支持的包生态系统”。
此外,可以使用依赖项提交 API(beta 版本)从所选择的包管理器或生态系统提交依赖项,即使该生态系统不受清单或锁定文件分析的依赖关系图支持。 依赖项关系图将显示按生态系统分组的提交依赖项,但与从清单或锁定文件解析的依赖项是分开的。 有关依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。
当创建包含针对默认分支的依赖项更改的拉取请求时,GitHub 使用依赖关系图向拉取请求添加依赖项审查。 它们指示依赖项是否包含漏洞,如果是,则指示已修复漏洞的依赖项版本。 有关详细信息,请参阅“关于依赖项审查”。
依赖关系图可用性
依赖关系图可用于使用支持的文件格式在支持的包生态系统中定义依赖关系的每个公共存储库。 存储库管理员还可以为私有存储库设置依赖项关系图。 有关依赖项图配置的详细信息,请参阅“配置依赖项图。“
包含的依赖项
依赖项关系图包含支持的生态系统中的清单和锁定文件(或等效文件)中详述的存储库的所有依赖项,以及任何使用依赖项提交 API (beta) 提交的依赖项。 这包括:
- 直接依赖项,这些依赖项是在清单或锁定文件中显式定义的或是已使用依赖项提交 API (beta) 提交的
- 这些直接依赖项的间接依赖项,也称为过渡依赖项或子依赖项
依赖项关系图通过锁定文件显式标识间接依赖项或者通过检查直接依赖项的依赖项来标识间接依赖项。 对于最可靠的依赖关系图, 您应该使用锁定文件(或其等效项),因为它们准确地定义了您当前使用的直接和间接依赖项版本。 如果您使用锁定文件,还要确保仓库的所有贡献者都使用相同的版本,这样更便于您 测试和调试代码。
有关 GitHub 如何帮助你了解环境中的依赖项的详细信息,请参阅“关于供应链安全性”。
包含的依赖关系
对于公共仓库,仅报告依赖于它或它发布的包的公共仓库。 对于私有仓库,不报告此信息。
使用依赖关系图
您可以使用依赖关系图:
- 浏览代码所依赖的存储库,以及依赖于它的存储库。 有关详细信息,请参阅“探索存储库的依赖项”。
- 查看和更新仓库中有漏洞的依赖项。 有关详细信息,请参阅“关于 Dependabot alerts。”
- 查看拉取请求中有漏洞依赖项的相关信息。 有关详细信息,请参阅“查看拉取请求中的依赖项更改”。
支持的包生态系统
建议的格式明确定义哪些版本用于所有直接和所有间接依赖项。 如果使用这些格式,依赖项关系图会更准确。 它还反映当前的生成设置,并且使依赖项关系图能够报告直接和间接依赖项中的漏洞。从清单文件(或等效文件)推断的间接依赖项将不包括在不安全的依赖项检查中。
| 程序包管理器 | 语言 | 推荐格式 | 所有支持的格式 |
| --- | --- | --- | ---| | Cargo | Rust | Cargo.lock | Cargo.toml、Cargo.lock | | Composer | PHP | composer.lock | composer.json、composer.lock | | NuGet | .NET 语言 (C#, F#, VB), C++ | .csproj、.vbproj、.nuspec、.vcxproj、.fsproj | .csproj、.vbproj、.nuspec、.vcxproj、.fsproj、packages.config | | GitHub Actions wirkflows[†] | YAML | .yml、.yaml | .yml, .yaml | | Go 模块 | Go | go.sum | go.mod、go.sum | | Maven | Java, Scala | pom.xml | pom.xml | | npm | JavaScript | package-lock.json | package-lock.json、package.json| | pip | Python | requirements.txt、pipfile.lock | requirements.txt、pipfile、pipfile.lock、setup.py[‡] | | pub | Dart | pubspec.lock | pubspec.yaml、pubspec.lock | | Python Poetry | Python | poetry.lock | poetry.lock、pyproject.toml | | RubyGems | Ruby | Gemfile.lock | Gemfile.lock、Gemfile、*.gemspec | | Yarn | JavaScript | yarn.lock | package.json、yarn.lock |
[†] GitHub Actions 工作流必须位于要识别为清单的存储库的 .github/workflows/ 目录中。 使用 jobs[*].steps[*].uses 或 jobs.<job_id>.uses 语法引用的任何操作或工作流都将被分析为依赖项。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。
[‡] 如果你在 setup.py 文件中列出你的 Python 依赖项,我们可能无法分析和列出你项目中的每个依赖项。
注意:GitHub Actions 工作流程依赖项显示在依赖项关系图中,以供参考。 GitHub Actions 工作流程目前不支持 Dependabot 警报。
你可以使用依赖项提交 API (beta) 将所选的包管理器或生态系统中的依赖项添加到依赖项关系图,即使所选的生态系统不在上述受支持的生态系统列表中也可如此。 依赖项关系图将显示按生态系统分组的已提交依赖项,但与从清单或锁定文件解析的依赖项是分开的。 你只会收到来自 GitHub Advisory Database 支持的生态系统之一的依赖项的 Dependabot alerts。 有关依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。
延伸阅读
- Wikipedia 上的“依赖项关系图”
- 探索存储库的依赖项
- 查看和更新 Dependabot alerts
- 漏洞依赖项检测疑难解答