1+ <#
2+ . SYNOPSIS
3+ Verifies that Microsoft NuGet packages have proper metadata.
4+ . DESCRIPTION
5+ Downloads a verification tool and runs metadata validation on the provided NuGet packages. This script writes an
6+ error if any of the provided packages fail validation. All arguments provided to this PowerShell script that do not
7+ match PowerShell parameters are passed on to the verification tool downloaded during the execution of this script.
8+ . PARAMETER NuGetExePath
9+ The path to the nuget.exe binary to use. If not provided, nuget.exe will be downloaded into the -DownloadPath
10+ directory.
11+ . PARAMETER PackageSource
12+ The package source to use to download the verification tool. If not provided, nuget.org will be used.
13+ . PARAMETER DownloadPath
14+ The directory path to download the verification tool and nuget.exe to. If not provided,
15+ %TEMP%\NuGet.VerifyNuGetPackage will be used.
16+ . PARAMETER args
17+ Arguments that will be passed to the verification tool.
18+ . EXAMPLE
19+ PS> .\verify.ps1 *.nupkg
20+ Verifies the metadata of all .nupkg files in the currect working directory.
21+ . EXAMPLE
22+ PS> .\verify.ps1 --help
23+ Displays the help text of the downloaded verifiction tool.
24+ . LINK
25+ https://github.com/NuGet/NuGetGallery/blob/master/src/VerifyMicrosoftPackage/README.md
26+ #>
27+
28+ # This script was copied from https://github.com/NuGet/NuGetGallery/blob/3e25ad135146676bcab0050a516939d9958bfa5d/src/VerifyMicrosoftPackage/verify.ps1
29+
30+ [CmdletBinding (PositionalBinding = $false )]
31+ param (
32+ [string ]$NuGetExePath ,
33+ [string ]$PackageSource = " https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" ,
34+ [string ]$DownloadPath ,
35+ [Parameter (ValueFromRemainingArguments = $true )]
36+ [string []]$args
37+ )
38+
39+ # The URL to download nuget.exe.
40+ $nugetExeUrl = " https://dist.nuget.org/win-x86-commandline/v4.9.4/nuget.exe"
41+
42+ # The package ID of the verification tool.
43+ $packageId = " NuGet.VerifyMicrosoftPackage"
44+
45+ # The location that nuget.exe and the verification tool will be downloaded to.
46+ if (! $DownloadPath ) {
47+ $DownloadPath = (Join-Path $env: TEMP " NuGet.VerifyMicrosoftPackage" )
48+ }
49+
50+ $fence = New-Object - TypeName string - ArgumentList ' =' , 80
51+
52+ # Create the download directory, if it doesn't already exist.
53+ if (! (Test-Path $DownloadPath )) {
54+ New-Item - ItemType Directory $DownloadPath | Out-Null
55+ }
56+ Write-Host " Using download path: $DownloadPath "
57+
58+ if ($NuGetExePath ) {
59+ $nuget = $NuGetExePath
60+ } else {
61+ $downloadedNuGetExe = Join-Path $DownloadPath " nuget.exe"
62+
63+ # Download nuget.exe, if it doesn't already exist.
64+ if (! (Test-Path $downloadedNuGetExe )) {
65+ Write-Host " Downloading nuget.exe from $nugetExeUrl ..."
66+ $ProgressPreference = ' SilentlyContinue'
67+ try {
68+ Invoke-WebRequest $nugetExeUrl - OutFile $downloadedNuGetExe
69+ $ProgressPreference = ' Continue'
70+ } catch {
71+ $ProgressPreference = ' Continue'
72+ Write-Error $_
73+ Write-Error " nuget.exe failed to download."
74+ exit
75+ }
76+ }
77+
78+ $nuget = $downloadedNuGetExe
79+ }
80+
81+ Write-Host " Using nuget.exe path: $nuget "
82+ Write-Host " "
83+
84+ # Download the latest version of the verification tool.
85+ Write-Host " Downloading the latest version of $packageId from $packageSource ..."
86+ Write-Host $fence
87+ & $nuget install $packageId `
88+ - Prerelease `
89+ - OutputDirectory $DownloadPath `
90+ - Source $PackageSource
91+ Write-Host $fence
92+ Write-Host " "
93+
94+ if ($LASTEXITCODE -ne 0 ) {
95+ Write-Error " nuget.exe failed to fetch the verify tool."
96+ exit
97+ }
98+
99+ # Find the most recently downloaded tool
100+ Write-Host " Finding the most recently downloaded verification tool."
101+ $verifyProbePath = Join-Path $DownloadPath " $packageId .*"
102+ $verifyPath = Get-ChildItem - Path $verifyProbePath - Directory `
103+ | Sort-Object - Property LastWriteTime - Descending `
104+ | Select-Object - First 1
105+ $verify = Join-Path $verifyPath " tools\NuGet.VerifyMicrosoftPackage.exe"
106+ Write-Host " Using verification tool: $verify "
107+ Write-Host " "
108+
109+ # Execute the verification tool.
110+ Write-Host " Executing the verify tool..."
111+ Write-Host $fence
112+ & $verify $args
113+ Write-Host $fence
114+ Write-Host " "
115+
116+ # Respond to the exit code.
117+ if ($LASTEXITCODE -ne 0 ) {
118+ Write-Error " The verify tool found some problems."
119+ } else {
120+ Write-Output " The verify tool succeeded."
121+ }
0 commit comments