Skip to main content

此版本的 GitHub Enterprise Server 将于以下日期停止服务 2025-06-04. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

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

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

关于依赖项关系图

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

对于每个依赖项,可以看到版本、包含它的清单文件,以及它是否具有已知漏洞。 对于支持可传递依赖项的包生态系统,会显示关系状态,并且公开按钮“...”将显示引入依赖项的可传递路径。**** 有关可传递依赖项支持的详细信息,请参阅 依赖项关系图支持的包生态系统

还可以使用搜索栏搜索特定依赖项。 依赖项自动排序,漏洞显示在顶部。

GitHub 不检索依赖项的许可信息,也不计算有关依赖项、仓库和依赖于仓库的包的信息。有关详细信息,请参阅 关于依赖关系图

支持的包生态系统

如果启用了依赖项关系图,它将扫描你的仓库,查找许多常用编程语言包生态系统所使用的清单文件。 当它找到其中一个受支持的清单文件时,它将分析该文件的内容,并构建该文件内容的呈现形式,包括每个包的名称和版本。

一些文件明确定义哪些版本用于所有直接和所有间接依赖项。 它们将包版本锁定为构建中所包含的那些版本,并使 Dependabot 能够在直接和间接依赖项中找到存在漏洞的版本。 如果你使用这些格式,你的依赖项关系图会更加准确,因此它们会列在此表的“Recommended files”栏下。

程序包管理器语言可传递依赖项建议的文件其他文件
CargoRustCargo.lockCargo.toml
编辑器PHPcomposer.lockcomposer.json
NuGet.NET 语言(C#、F#、VB)、C++.csproj.vbproj.nuspec.vcxproj.fsprojpackages.config
GitHub Actions 工作流程YAML.yml.yaml
Go 模块Gogo.mod
MavenJava、Scalapom.xml
npmJavaScriptpackage-lock.jsonpackage.json
pipPythonrequirements.txtpipfile.lockpipfile, setup.py
pnpmJavaScriptpnpm-lock.yamlpackage.json
酒馆Dartpubspec.lockpubspec.yaml
Python PoetryPythonpoetry.lockpyproject.toml
RubyGemsRubyGemfile.lockGemfile*.gemspec
Swift 包管理器SwiftPackage.resolved
YarnJavaScriptyarn.lockpackage.json

Note

  • 如果你在 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 依赖项提交
Mix (Elixir)Mix 依赖项提交
ScalaSbt 依赖项提交
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”。

清单去重

依赖项关系图可以通过三种不同的方式来了解依赖项:静态分析、自动提交和用户提交。 一个仓库可以配置多种方法,这会导致同一个包清单被扫描多次,而且每次扫描可能会产生不同的结果。 依赖项关系图使用去重逻辑来分析输出,为每个清单文件优先选取最准确的信息。

依赖项关系图会依据以下优先级规则,仅显示每个清单文件的一个实例。

  1. 用户提交具有最高优先级,因为它们通常是在项目构建期间创建的,包含最完整的信息。****
    • 如果存在来自不同检测器的多个手动快照,这些快照将根据关联器按字母顺序进行排序,并且会采用第一个快照。
    • 如果有两个使用相同检测器的关联器,已解析的依赖项将合并。 有关关联器和检测器的详细信息,请参阅 适用于依赖项提交的 REST API 终结点
  2. 自动提交具有第二高的优先级,因为它们同样是在项目构建期间创建的,但并非由用户提交。****
  3. 静态分析结果会在没有其他可用数据的情况下被采用。****