Partager via


Création d’une source de mise en cache de ressources x-script pour NuGet

Remarque

Cette section décrit une fonctionnalité expérimentale de vcpkg qui peut changer ou être supprimée à tout moment.

Dans cet exemple, nous allons configurer un flux NuGet en tant que source de mise en cache de ressources à l’aide d’un script pour restaurer et envoyer des artefacts.

Prérequis

  • nuget.exe
  • Un flux de packages NuGet

Étape 1 : Créer asset-source.nuspec

Créez un modèle de spec de package NuGet avec le contenu suivant :

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

Étape 2 : Créer un script de fournisseur de ressources

Vous devez maintenant créer un script qui télécharge des packages à partir du flux NuGet si disponible et charge les packages manquants dans votre flux s’ils ne le sont pas.

Créez asset-provider.bat avec le contenu fourni ci-dessous, veillez à remplacer l’URL du flux NuGet et le chemin d’accès à asset-source.nuspec leurs valeurs correctes sur votre système.

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

Étape 3 : Configurer les sources de mise en cache des ressources

Maintenant que vous avez créé le script du fournisseur d’actifs, vous devez demander à vcpkg de l’utiliser comme source de mise en cache des ressources. Pour ce faire, définissez les variables d’environnement suivantes :

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

REMARQUE : veillez à remplacer les chemins d’espace réservé au script du fournisseur de ressources et nuget.exe par les chemins d’accès appropriés dans votre système.

X_VCPKG_ASSET_SOURCES est la variable d’environnement utilisée pour définir les sources de mise en cache des ressources que vcpkg doit utiliser. Dans cet exemple, nous définissons les valeurs suivantes :

  • clear se débarrasse de l’emplacement de mise en cache des ressources par défaut.
  • x-script ajoute votre script en tant que source de mise en cache de ressources, le premier paramètre indique que la ligne de commande vcpkg doit appeler, dans cet exemple, nous appelons le asset-provider.bat script et transférons certains paramètres requis.
  • x-block-origin force tous les téléchargements à provenir des sources de mise en cache des ressources configurées.

VCPKG_KEEP_ENV_VARS est utilisé pour transférer des variables d’environnement à l’environmet de build de vcpkg. Pendant les builds vcpkg crée un environnement propre, en ajoutant NUGET pour VCPKG_KEEP_ENV_VARS nous assurer que l’emplacement exécutable NuGet est transféré pendant les builds.

Une fois que tout a été correctement configuré, chaque fois que vcpkg télécharge une ressource, elle le charge dans votre flux NuGet à utiliser dans les téléchargements futurs. Vous remarquerez que les ressources mises en cache sont nommées après leur fichier SHA512 et la version spécifiée dans asset-source.nuspec. Si vous souhaitez avoir des noms plus méchants pour vos packages, vous pouvez modifier le modèle de package et le script fournisseur de ressources avec votre propre logique.