教程:使用 GitHub 包在 GitHub Actions 工作流中设置 vcpkg 二进制缓存
注意
本教程使用 GitHub 包中托管的 NuGet 源,但同样的说明只需极小的更改即可用于其他 NuGet 源提供程序,例如:Azure Artifacts。
GitHub 包为 vcpkg 生成的 NuGet 二进制包提供一个方便的存储库。 本教程介绍如何在使用 GitHub 包作为远程存储的 GitHub Actions 工作流中设置二进制缓存。
本教程介绍以下操作:
先决条件
- 代码编辑器
- 使用 GitHub Actions 的 GitHub 存储库
- 使用 vcpkg 的项目
1 - 提供一个 GitHub 个人访问令牌
按照 GitHub 的说明为存储库生成一个经典个人访问令牌 (PAT),确保授予该令牌 packages:write
和 packages:read
权限。
然后将 GitHub PAT 添加为存储库的 GitHub Actions 工作流中可用的机密。 在本教程中,我们假定你将机密命名为 GH_PACKAGES_TOKEN
。
GITHUB_TOKEN
提供的内置 PAT 仅具有 packages:read
权限,如果计划在工作流中设置只读二进制缓存,则可以使用它。
2 - 启动 vcpkg
vcpkg 获取其在二进制缓存操作期间使用的其自己的 nuget.exe
可执行文件副本。 本教程使用 vcpkg 获取的 nuget.exe
。
添加用于启动工作流的 vcpkg 的步骤:
- name: Bootstrap vcpkg
shell: pwsh
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
shell: bash
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh
可能需要将 vcpkg 启动脚本的位置替换为工作流的正确位置,本教程假定 vcpkg 位于存储库根目录中的 vcpkg
文件夹。
3 - 设置所需的环境变量
将以下环境变量添加到工作流文件中(将 <OWNER>
替换为 GitHub 的用户名或组织名称):
env:
USERNAME: <OWNER>
VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/<OWNER>/index.json,readwrite"
可能需要将 VCPKG_EXE
的值替换为启动 vcpkg 步骤中生成的 vcpkg 可执行文件的位置。
在此步骤中,你将 VCPKG_BINARY_SOURCES
配置为使用 GitHub 包源作为二进制缓存源,请阅读二进制缓存参考以了解详细信息。
4 - 将 GitHub 包添加为 NuGet 源
vcpkg fetch nuget
命令输出 vcpkg 获取的 nuget.exe
的位置,在必要时下载可执行文件。
添加以下 GitHub Actions 工作流文件中的步骤:
- name: Add NuGet sources
shell: pwsh
run: |
.$(${{ env.VCPKG_EXE }} fetch nuget) `
sources add `
-Source "${{ env.FEED_URL }}" `
-StorePasswordInClearText `
-Name GitHubPackages `
-UserName "${{ env.USERNAME }}" `
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
.$(${{ env.VCPKG_EXE }} fetch nuget) `
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" `
-Source "${{ env.FEED_URL }}"
在 Linux 上,你需要 mono
来执行 nuget.exe
。 使用 Ubuntu 的 GitHub Actions 运行程序预安装有 mono
。 否则,可以使用分发的系统包管理器安装 mono
。
- name: Add NuGet sources
shell: bash
env:
VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
USERNAME: <OWNER>
FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
run: |
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
sources add \
-Source "${{ env.FEED_URL }}" \
-StorePasswordInClearText \
-Name GitHubPackages \
-UserName "${{ env.USERNAME }}" \
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
可能需要将 GH_PACKAGES_TOKEN
替换为你为提供 GitHub 个人访问令牌步骤中生成的 PAT 提供的正确机密名称。
大功告成! vcpkg 现在将从托管在 GitHub Actions 工作流内的 GitHub 包上的 NuGet 源上传或还原包。
后续步骤
下面是接下来要尝试的其他任务: