|
| 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://api.nuget.org/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