关于依赖项关系图
依赖项关系图是存储在存储库中的清单和锁定文件以及使用 依赖项提交 API 提交给存储库的任何依赖项的摘要。 对于每个存储库,它显示 依赖关系,即它所依赖的生态系统和包。
对于每个依赖项,可以看到版本、包含它的清单文件,以及它是否具有已知漏洞。 对于支持可传递依赖项的包生态系统,会显示关系状态,并且公开按钮“...”将显示引入依赖项的可传递路径。**** 有关可传递依赖项支持的详细信息,请参阅 依赖项关系图支持的包生态系统。
还可以使用搜索栏搜索特定依赖项。 依赖项自动排序,漏洞显示在顶部。
GitHub 不检索依赖项的许可信息,也不计算有关依赖项、仓库和依赖于仓库的包的信息。有关详细信息,请参阅 关于依赖关系图。
支持的包生态系统
如果启用了依赖项关系图,它将扫描你的仓库,查找许多常用编程语言包生态系统所使用的清单文件。 当它找到其中一个受支持的清单文件时,它将分析该文件的内容,并构建该文件内容的呈现形式,包括每个包的名称和版本。
一些文件明确定义哪些版本用于所有直接和所有间接依赖项。 它们将包版本锁定为构建中所包含的那些版本,并使 Dependabot 能够在直接和间接依赖项中找到存在漏洞的版本。 如果你使用这些格式,你的依赖项关系图会更加准确,因此它们会列在此表的“Recommended files”栏下。
程序包管理器 | 语言 | 可传递依赖项 | 建议的文件 | 其他文件 |
---|---|---|---|---|
Cargo | Rust | Cargo.lock | Cargo.toml | |
编辑器 | PHP | composer.lock | composer.json | |
NuGet | .NET 语言(C#、F#、VB)、C++ | .csproj 、.vbproj 、.nuspec 、.vcxproj 、.fsproj | packages.config | |
GitHub Actions 工作流程 | YAML | .yml 、.yaml | ||
Go 模块 | Go | go.mod | ||
Maven | Java、Scala | pom.xml | ||
npm | JavaScript | package-lock.json | package.json | |
pip | Python | requirements.txt 、pipfile.lock | pipfile , setup.py | |
pnpm | JavaScript | pnpm-lock.yaml | package.json | |
酒馆 | Dart | pubspec.lock | pubspec.yaml | |
Python Poetry | Python | poetry.lock | pyproject.toml | |
RubyGems | Ruby | Gemfile.lock | Gemfile 、*.gemspec | |
Swift 包管理器 | Swift | Package.resolved | ||
Yarn | JavaScript | yarn.lock | package.json |
Note
- 如果你在
setup.py
文件中列出你的 Python 依赖项,我们可能无法分析和列出你项目中的每个依赖项。 - GitHub Actions 工作流必须位于要识别为清单的存储库的
.github/workflows/
目录中。 使用jobs[*].steps[*].uses
或jobs.<job_id>.uses
语法引用的任何操作或工作流都将被分析为依赖项。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。 - Dependabot 只会为使用语义版本控制的易受攻击的 GitHub Actions 创建 Dependabot alerts。 你将不会收到有关使用 SHA 版本控制的易受攻击操作的警报。 如果将 GitHub Actions 与 SHA 版本控制配合使用,建议为存储库或组织启用 Dependabot version updates 以保留更新到最新版本的操作。 有关详细信息,请参阅“关于 Dependabot 警报”和“关于 Dependabot 版本更新”。
通过依赖项提交操作支持的包生态系统
除了依赖项关系图的静态分析和自动提交外,还可以使用 依赖项提交 API 将生成时依赖项添加到依赖项关系图,或者将选择的包管理器和生态系统的依赖项添加到依赖项关系图,即使该生态系统不在上面支持的生态系统列表中。 这些提交的依赖项中的依赖项信息会依次流入 Dependabot updates 和 Dependabot alerts。
使用 依赖项提交 API 提交到项目的依赖项将显示用于提交的检测器以及提交时间。有关 依赖项提交 API 的详细信息,请参阅 使用依赖项提交 API。
你通常在 GitHub Actions 工作流中使用 依赖项提交 API,从而在生成项目时提交项目的依赖项。 使用 依赖项提交 API 最简单的方法是向存储库添加预创建的操作,该操作将收集依赖项列表并将它转换为所需的快照格式,然后将此列表提交到 API。 可以在下表中找到指向当前可用操作的链接。
生态系统 | 操作 |
---|---|
Go | Go 依赖项提交 |
Gradle | Gradle 依赖项提交 |
Maven | Maven 依赖关系树依赖项提交 |
研磨 | Mill 依赖项提交 |
Mix (Elixir) | Mix 依赖项提交 |
Scala | Sbt 依赖项提交 |
NuGet 及其他 | 组件检测依赖项提交操作 |
Note
对于组件检测依赖项提交操作,其他受支持的生态系统包括 Vcpkg、Conan、Conda、Crates 以及 NuGet。
例如,以下 Go 依赖项提交工作流将计算 Go 生成目标(带有 main
函数的 Go 文件)的依赖项,并将列表提交到 依赖项提交 API。
name: Go Dependency Submission
on:
push:
branches:
- main
# The API requires write permission on the repository to submit dependencies
permissions:
contents: write
# Environment variables to configure Go and Go modules. Customize as necessary
env:
GOPROXY: '' # A Go Proxy server to be used
GOPRIVATE: '' # A list of modules are considered private and not requested from GOPROXY
jobs:
go-action-detection:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ">=1.18.0"
- name: Run snapshot action
uses: actions/go-dependency-submission@v1
with:
# Required: Define the repo path to the go.mod file used by the
# build target
go-mod-path: go-example/go.mod
#
# Optional. Define the repo path of a build target,
# a file with a `main()` function.
# If undefined, this action will collect all dependencies
# used by all build targets for the module. This may
# include Go dependencies used by tests and tooling.
go-build-target: go-example/cmd/octocat.go
还可以创建自己的操作。 有关详细信息,请参阅“使用依赖项提交 API”。
清单去重
依赖项关系图可以通过三种不同的方式来了解依赖项:静态分析、自动提交和用户提交。 一个仓库可以配置多种方法,这会导致同一个包清单被扫描多次,而且每次扫描可能会产生不同的结果。 依赖项关系图使用去重逻辑来分析输出,为每个清单文件优先选取最准确的信息。
依赖项关系图会依据以下优先级规则,仅显示每个清单文件的一个实例。
- 用户提交具有最高优先级,因为它们通常是在项目构建期间创建的,包含最完整的信息。****
- 如果存在来自不同检测器的多个手动快照,这些快照将根据关联器按字母顺序进行排序,并且会采用第一个快照。
- 如果有两个使用相同检测器的关联器,已解析的依赖项将合并。 有关关联器和检测器的详细信息,请参阅 适用于依赖项提交的 REST API 终结点。
- 自动提交具有第二高的优先级,因为它们同样是在项目构建期间创建的,但并非由用户提交。****
- 静态分析结果会在没有其他可用数据的情况下被采用。****