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