Руководство. Настройка двоичного кэша vcpkg с помощью пакетов GitHub в рабочем процессе GitHub Actions
Примечание.
В этом руководстве используются веб-каналы NuGet, размещенные в пакетах GitHub, но те же инструкции можно использовать для других поставщиков веб-каналов NuGet, например: Артефакты Azure с минимальными изменениями.
Пакеты GitHub предлагают удобный репозиторий для двоичных пакетов NuGet, созданных vcpkg. В этом руководстве показано, как настроить двоичный кэш в рабочем процессе GitHub Actions, использующего пакеты GitHub в качестве удаленного хранилища.
Из этого руководства вы узнаете, как выполнять следующие задачи:
Необходимые компоненты
- Редактор кода
- Репозиторий GitHub с помощью GitHub Actions
- Проект с помощью vcpkg
1. Предоставление личного маркера доступа GitHub
Следуйте инструкциям GitHub, чтобы создать классический личный маркер доступа (PAT) для репозитория, обязательно предоставьте ему packages:write
и packages:read
разрешения.
Затем добавьте GitHub PAT в качестве секрета, доступного в рабочих процессах GitHub Action репозитория. В этом руководстве предполагается, что вы называете секрет как GH_PACKAGES_TOKEN
.
Встроенный PAT, предоставленный GITHUB_TOKEN
только packages:read
разрешением, можно использовать его, если вы планируете использовать двоичный кэш только для чтения в рабочем процессе.
2 — bootstrap vcpkg
vcpkg получает собственную копию исполняемого nuget.exe
файла, который он использует во время двоичных операций кэширования. В этом руководстве используется nuget.exe
приобретенный vcpkg.
Добавьте шаг для загрузки 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
выводит расположение приобретенного nuget.exe
vcpkg, скачивая исполняемый файл при необходимости.
Добавьте следующий шаг в файл рабочего процесса 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
. GitHub Actions runners using Ubuntu предоставляется с 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 Персональный маркер доступа.
Вот и все! vcpkg теперь будет отправлять или восстанавливать пакеты из веб-канала NuGet, размещенного в пакетах GitHub в рабочем процессе GitHub Actions.
Следующие шаги
Ниже приведены другие задачи, которые необходимо выполнить следующим образом: