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 leasset-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.