Skip to main content

依赖项关系图支持的包生态系统

依赖项关系图支持各种生态系统。

关于依赖项关系图

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

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

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

有关详细信息,请参阅“关于依赖关系图”。

本文介绍了支持的生态系统有哪些。

支持的包生态系统

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

程序包管理器语言推荐格式所有支持的格式
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 将生成时依赖项添加到依赖项关系图,或者将选择的包管理器和生态系统的依赖项添加到依赖项关系图,即使该生态系统不在上面支持的生态系统列表中。 这些提交的依赖项中的依赖项信息会依次流入 Dependabot updates 和 Dependabot alerts。

使用 依赖项提交 API 提交到项目的依赖项将显示用于提交的检测器以及提交时间。 有关 依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。

你通常在 GitHub Actions 工作流中使用 依赖项提交 API,从而在生成项目时提交项目的依赖项。 使用 依赖项提交 API 最简单的方法是向存储库添加预创建的操作,该操作将收集依赖项列表并将它转换为所需的快照格式,然后将此列表提交到 API。 可以在下表中找到指向当前可用操作的链接。

生态系统操作
GoGo 依赖项提交
GradleGradle 依赖项提交
MavenMaven 依赖关系树依赖项提交
研磨Mill 依赖项提交
ScalaSbt 依赖项提交
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”。