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