Поделиться через


Руководство. Настройка двоичного кэша 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.exevcpkg, скачивая исполняемый файл при необходимости.

Добавьте следующий шаг в файл рабочего процесса 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 Acions.

Следующие шаги

Ниже приведены другие задачи, которые необходимо выполнить следующим образом: