Создание источника кэширования ресурсов x-script для NuGet

Примечание.

В этом разделе рассматривается экспериментальная функция vcpkg, которая может изменяться или удаляться в любое время.

В этом примере мы настроим веб-канал NuGet в качестве источника кэширования ресурсов с помощью скрипта для восстановления и отправки артефактов.

Необходимые компоненты

  • nuget.exe
  • Веб-канал пакетов NuGet

Шаг 1. Создание asset-source.nuspec

Создайте шаблон спецификации пакета NuGet со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>$sha$</id>
        <version>1.0.0</version>
        <description>vcpkg download asset</description>
        <authors>vcpkg</authors>
    </metadata>
    <files>
        <file src="$file$" />
    </files>
</package>

Шаг 2. Создание скрипта поставщика ресурсов

Теперь необходимо создать скрипт, который загружает пакеты из веб-канала NuGet, если он доступен и отправляет отсутствующие пакеты в веб-канал, если они отсутствуют.

Создайте asset-provider.bat содержимое, предоставленное ниже, обязательно замените URL-адрес веб-канала NuGet и путь к asset-source.nuspec правильным значениям в вашей системе.

@echo off
set url=%1
set sha512=%2
set dst=%3
set "_dst=%dst:/=\%"
set "_sha512=%sha512:~0,90%"

cd /d %~dp3
%NUGET% install %sha512:~0,90% -Source https://your-nuget-feed-url
echo.
if exist %_sha512%.1.0.0 (
    echo "Pull from the NuGet feed"
    cd %_sha512%.1.0.0

    REM Assume both are files not directories
    echo "F" | xcopy /f *.part %_dst%
) else (
    echo "Fetch from the url"
    curl.exe -L %url% --create-dirs --output %dst%
    REM Replace with the correct path
    %NUGET% pack C:\path\to\asset-source.nuspec -BasePath %~dp3 -Properties "sha=%_sha512%;file=%dst%" -OutputDirectory %TEMP%
    %NUGET% push -ApiKey az -SkipDuplicate %TEMP%\%_sha512%.1.0.0.nupkg -Source https://your-nuget-feed-url
)

Шаг 3. Настройка источников кэширования активов

Теперь, когда вы создали скрипт поставщика ресурсов, необходимо указать vcpkg использовать его в качестве источника кэширования активов. Для этого задайте следующие переменные среды:

$env:X_VCPKG_ASSET_SOURCES="clear;x-script,C:/path/to/asset-provider.bat {url} {sha512} {dst};x-block-origin"
$env:NUGET="C:/path/to/nuget.exe"
$env:VCPKG_KEEP_ENV_VARS="NUGET"

ПРИМЕЧАНИЕ. Обязательно замените пути заполнителя скриптом поставщика ресурсов и nuget.exe правильными путями в системе.

X_VCPKG_ASSET_SOURCES — переменная среды, используемая для задания источников кэширования ресурсов для используемого vcpkg. В этом примере мы задали следующие значения:

  • clear получает удаление расположения кэширования ресурсов по умолчанию.
  • x-script добавляет скрипт в качестве источника кэширования активов, первый параметр указывает, что vcpkg командной строки должен вызываться, в этом примере мы вызываем asset-provider.bat скрипт и перенаправляем некоторые необходимые параметры.
  • x-block-origin заставляет все скачивание поступать из настроенных источников кэширования активов.

VCPKG_KEEP_ENV_VARS используется для пересылки переменных среды в среду сборки vcpkg. Во время сборки vcpkg создает чистую среду, добавив NUGET , VCPKG_KEEP_ENV_VARS что во время сборки перенаправляется исполняемое расположение NuGet.

Когда все будет правильно настроено, в любой момент, когда vcpkg скачивает ресурс, который будет отправлять его в веб-канал NuGet для использования в будущих скачиваниях. Вы заметите, что кэшированные ресурсы именуются в честь файла SHA512 и версии, указанной в asset-source.nuspec. Если вы хотите иметь более средние имена для пакетов, вы можете изменить шаблон пакета и скрипт поставщика активов с помощью собственной логики.