关于 依赖项提交 API
可以使用 REST API 提交项目的依赖项。 这使你可以将依赖项(如编译或生成软件时解析的依赖项)添加到 GitHub 的依赖项关系图功能,从而更全面地了解项目的所有依赖项。
依赖项关系图显示你使用 API 提交的任何依赖项,以及从存储库中的清单或锁定文件(例如 package-lock.json
JavaScript 项目中的文件)标识的任何依赖项。 有关查看依赖项关系图的详细信息,请参阅 探索仓库的依赖项。
提交的依赖项将收到 Dependabot alerts 和 Dependabot security updates 以处理任何已知的漏洞。 你只会收到来自 GitHub Advisory Database 支持的生态系统之一的依赖关系的 Dependabot alerts。 有关这些生态系统的详细信息,请参阅 关于 GitHub 公告数据库。 对于通过 依赖项提交 API 提交的可传递依赖项,如果更新可用,Dependabot 将自动打开拉取请求以更新父依赖项。
提交的依赖项会显示在依赖项评审中,但在组织的依赖项见解中_不_可用。
注意
依赖关系审查 API 和 依赖项提交 API 协同工作。 这意味着依赖关系审查 API 将包括通过 依赖项提交 API 提交的依赖关系。
依赖项以快照的形式提交到 依赖项提交 API。 快照是一组与提交 SHA 和其他元数据关联的依赖项,反映提交存储库的当前状态。 构建时检测到的依赖项可以生成快照。 如需了解通过网络使用 依赖项提交 API 的技术细节,请参阅“适用于依赖项提交的 REST API 终结点”。
在生成时提交依赖项
可以在 GitHub Actions 工作流中使用 依赖项提交 API,从而在生成项目时提交项目的依赖项。
使用预创建的操作
使用 依赖项提交 API 最简单的方法是向存储库添加预创建的操作,该操作将收集依赖项列表并将它转换为所需的快照格式,然后将此列表提交到 API。
生态系统 | 操作 |
---|---|
Go | Go 依赖项提交 |
Gradle | Gradle 依赖项提交 |
Maven | Maven 依赖关系树依赖项提交 |
研磨 | Mill 依赖项提交 |
Mix (Elixir) | Mix 依赖项提交 |
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@v2
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 终结点 中“创建仓库快照”API 终结点的正文参数。
- 将格式化的依赖项列表提交到 依赖项提交 API。
GitHub 将维护依赖项提交工具包,这是一个 TypeScript 库,可帮助你生成自己的 GitHub 操作,用于将依赖项提交到 依赖项提交 API。 有关编写操作的详细信息,请参阅 重用自动化。
将 SBOM 作为快照提交
如果使用外部工具创建或管理软件物料清单 (SBOM),也可以将这些 SBOM 提交至 依赖项提交 API。 快照数据格式与标准的 SPDX 和 CycloneDX SBOM 格式非常相似,目前已有多种工具可用于生成或转换为快照格式。
提示
你可以使用 SPDX Dependency Submission Action 和 Anchore SBOM Action 来生成 SBOM 并提交至 依赖项提交 API。
例如,以下 SPDX 依赖项提交操作工作流将计算存储库的依赖项,生成 SPDX 2.2 格式的可导出的 SBOM,并将其提交到 依赖项提交 API。
name: SBOM upload
on:
workflow_dispatch:
push:
branches: ["main"]
jobs:
SBOM-upload:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
steps:
- uses: actions/checkout@v4
- name: Generate SBOM
# generation command documentation: https://github.com/microsoft/sbom-tool#sbom-generation
run: |
curl -Lo $RUNNER_TEMP/sbom-tool https://github.com/microsoft/sbom-tool/releases/latest/download/sbom-tool-linux-x64
chmod +x $RUNNER_TEMP/sbom-tool
$RUNNER_TEMP/sbom-tool generate -b . -bc . -pn $ -pv 1.0.0 -ps OwnerName -nsb https://sbom.mycompany.com -V Verbose
- uses: actions/upload-artifact@v4
with:
name: sbom
path: _manifest/spdx_2.2
- name: SBOM upload
uses: advanced-security/spdx-dependency-submission-action@5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e
with:
filePath: "_manifest/spdx_2.2/"