Compartilhar via


Criando uma origem de cache de ativos x-script para o NuGet

Observação

Esta seção cobre uma característica experimental do vcpkg que pode mudar ou ser removida a qualquer momento.

Neste exemplo, configuraremos um feed NuGet como uma fonte de cache de ativos usando um script para restaurar e enviar artefatos por push.

Pré-requisitos

  • nuget.exe
  • Um feed de pacotes NuGet

Etapa 1: Criar asset-source.nuspec

Crie um modelo de especificação de pacote NuGet com o seguinte conteúdo:

<?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>

Etapa 2: Criar um script de provedor de ativos

Agora você precisa criar um script que baixe pacotes do feed NuGet, se disponível, e carregue pacotes ausentes no seu feed, se eles não estiverem.

Crie asset-provider.bat com o conteúdo fornecido abaixo, certifique-se de substituir a URL do feed NuGet e o caminho para com asset-source.nuspec seus valores corretos em seu sistema.

@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
)

Etapa 3: Configurar as fontes de cache de ativos

Agora que você criou o script do provedor de ativos, precisa instruir vcpkg a usá-lo como uma fonte de cache de ativos. Para fazer isso, defina as seguintes variáveis de ambiente:

$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"

Observação : certifique-se de substituir os caminhos de espaço reservado para o script de provedor de ativos e nuget.exe com os caminhos corretos em seu sistema.

X_VCPKG_ASSET_SOURCES é a variável de ambiente usada para definir fontes de cache de ativos para vcpkg usar. Neste exemplo, definimos os seguintes valores:

  • clear Elimina o local de cache de ativos padrão.
  • x-script adiciona seu script como uma fonte de cache de ativo, o primeiro parâmetro indica que a linha de comando vcpkg deve invocar, neste exemplo chamamos o asset-provider.bat script e encaminhamos alguns parâmetros necessários.
  • x-block-origin força todos os downloads a virem das fontes de cache de ativos configuradas.

VCPKG_KEEP_ENV_VARS é usado para encaminhar variáveis de ambiente para o ambiente de construção do VCPKG. Durante as compilações, o vcpkg cria um ambiente limpo, ao adicionar NUGET a VCPKG_KEEP_ENV_VARS nós garantimos que o local executável do NuGet seja encaminhado durante as compilações.

Depois que tudo estiver configurado corretamente, sempre que o vcpkg baixar um ativo, ele o carregará em seu feed NuGet para usar em downloads futuros. Você notará que os ativos armazenados em cache são nomeados de acordo com o arquivo SHA512 e a versão especificada no asset-source.nuspec. Se você quiser ter nomes mais significativos para seus pacotes, poderá modificar o modelo de pacote e o script do provedor de ativos com sua própria lógica.