GitHub 集成点
缓存 GitHub Actions 工作流的 vcpkg 生成的二进制文件
vcpkg 的二进制缓存功能减少了构建使用 GitHub Actions 进行持续集成的项目所需的时间。 有两个可用于 GitHub 存储库的二进制缓存提供程序:GitHub Actions 缓存提供程序和 GitHub 包 NuGet 缓存提供程序。 有关这些 GitHub 功能的详细信息,请参阅 GitHub Actions 缓存和 GitHub 包。 有关 vcpkg 二进制缓存的详细信息,请参阅我们的二进制缓存功能文档。
GitHub Actions 缓存提供程序
注意
本部分介绍 vcpkg 的一项试验性功能,该功能随时可能会更改或移除。
GitHub Actions 缓存旨在存储存储库的中间构建文件,这些文件不会在两次作业或工作流运行之间经常更改。 对于 GitHub 用户,GitHub Actions 缓存很适合 vcpkg 的二进制缓存,比 vcpkg 的 GitHub 包二进制缓存集成更容易配置。 GitHub 提供了一些不同的工具来管理 Actions 缓存,其中包括 REST API 和 gh
命令行工具的扩展,以便你可以优化工作流的缓存。 vcpkg 与 GitHub Actions 缓存的集成是通过 x-gha
二进制源提供程序实现的。
GitHub 包 NuGet 缓存提供程序
通过 GitHub 包,存储库可以发布二进制项目以供公用或专用。 除了托管已发布包的存储之外,GitHub 包还通过充当包注册表来支持各种包管理工具。 通过使用 nuget
二进制源提供程序,vcpkg 可以使用 GitHub 包的 NuGet 注册表接口作为 vcpkg 二进制项目的缓存。 与 GitHub 包的集成并不像 GitHub Actions 缓存集成那么简单,而且缓存二进制文件的管理更加困难,这使得 GitHub Actions 缓存成为大多数用户的更好选择。
GitHub 依赖项关系图
注意
本部分介绍 vcpkg 的一项试验性功能,该功能随时可能会更改或移除。
提示
我们正在积极开发此功能,希望听到你的反馈。 如果你对当前功能或任何所需功能有任何想法,请发送电子邮件到 vcpkg@microsoft.com 或在 vcpkg 中提交问题,告知我们。 如果你对由此任何启用的 GitHub 功能有反馈,也请告知我们,我们将确保将其发送给 GitHub 适合的人员。
关于 GitHub 依赖项关系图
GitHub 依赖项关系图存储一组存储库的依赖项。 除了能够可视化存储库的依赖项之外,GitHub 还基于此数据构建了多项有用的功能,包括依赖项审查和 Dependabot 警报。 在 GitHub 的文档中了解关于保护供应链的更多信息。
vcpkg 与 GitHub 依赖项关系图的集成
vcpkg 对从 GitHub Actions 工作流内填充 GitHub 依赖项关系图提供了试验性支持。 要启用此功能,请在工作流文件中进行以下更改:
- 将
VCPKG_FEATURE_FLAGS
环境变量设置为包含值dependencygraph
。 - 将
GITHUB_TOKEN
环境变量设置为值${{ secrets.GITHUB_TOKEN }}
。 - 通过包含以下权限块,向 GitHub Actions 授予对存储库内容的写权限。 这需要将依赖项关系图元数据写入存储库。 这不会向存储库添加任何提交,也不会对存储库的内容进行任何其他修改。
permissions:
contents: write
必须在存储库的设置中启用 GitHub 依赖项关系图(公共存储库默认启用)。 对于专用存储库,请按照 GitHub 文档操作启用依赖项关系图,以便满足此要求。
已知限制
- 与 GitHub Actions 运行程序捆绑的 vcpkg 版本可能不是最新的。 使用最新版本的 vcpkg 获取对此功能的访问权限,并接收最新的 bug 修复。
- 依赖于依赖项关系图的功能(如 Dependabot 警报和 Dependabot 拉取请求)尚不可用。 如果你对这些功能感兴趣,请告诉我们!
示例 GitHub Actions 工作流
注意
此示例假定有一个有效的 vcpkg.json
清单,其中列出一些依赖端口。 有关清单的详细信息,请参阅有关清单模式的文档。
name: Populate dependencies
on:
push:
branches: [ main ]
workflow_dispatch:
permissions:
contents: write
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VCPKG_FEATURE_FLAGS: dependencygraph
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
# This will execute a dry-run, meaning that libraries will not be built and
# installed, but they will still be reported to the GitHub dependency graph.
# This step assumes `vcpkg` has been bootstrapped (run `./vcpkg/bootstrap-vcpkg`)
- name: Run vcpkg
run: ${{ github.workspace }}/vcpkg/vcpkg install --dry-run