关于依赖项关系图
依赖项关系图是存储在存储库中的清单和锁定文件以及使用 依赖项提交 API 提交给存储库的任何依赖项的摘要。 对于每个存储库,它显示:
- 依赖项、它依赖的生态系统和包
- 依赖项,是指依赖于它的存储库和包
对于每个依赖项,可以看到许可证信息和漏洞严重程度。 还可以使用搜索栏搜索特定依赖项。 依赖项按漏洞严重程度自动排序。
有关详细信息,请参阅“关于依赖关系图”。
本文介绍了支持的生态系统有哪些。
支持的包生态系统
建议的格式明确定义哪些版本用于所有直接和所有间接依赖项。 如果使用这些格式,依赖项关系图会更准确。 它还反映当前的生成设置,并且使依赖项关系图能够报告直接和间接依赖项中的漏洞。从清单文件(或等效文件)推断的间接依赖项将不包括在不安全的依赖项检查中。
程序包管理器 | 语言 | 推荐格式 | 所有支持的格式 |
---|---|---|---|
Cargo | Rust | Cargo.lock | Cargo.toml ,Cargo.lock |
编辑器 | 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 工作流程 | YAML | .yml ,.yaml | .yml ,.yaml |
Go 模块 | Go | go.mod | go.mod |
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 |
pnpm | JavaScript | pnpm-lock.yaml | package.json ,pnpm-lock.yaml |
酒馆 | Dart | pubspec.lock | pubspec.yaml ,pubspec.lock |
Python Poetry | Python | poetry.lock | poetry.lock ,pyproject.toml |
RubyGems | Ruby | Gemfile.lock | Gemfile.lock ,Gemfile ,*.gemspec |
Swift 包管理器 | Swift | Package.resolved | Package.resolved |
Yarn | JavaScript | yarn.lock | package.json ,yarn.lock |
注意:
-
如果你在
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 依赖项提交 |
Scala | Sbt 依赖项提交 |
NuGet 及其他 | 组件检测依赖项提交操作 |
注意:**** 对于组件检测依赖项提交操作,其他受支持的生态系统包括 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”。