-
Notifications
You must be signed in to change notification settings - Fork 273
/
Copy pathverify-nupkgs.ps1
87 lines (70 loc) · 3.12 KB
/
verify-nupkgs.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[System.String] $configuration
)
Add-Type -AssemblyName System.IO.Compression.FileSystem
$ErrorActionPreference = 'Stop'
function Unzip {
param([string]$zipfile, [string]$outpath)
Write-Verbose "Unzipping '$zipfile' to '$outpath'."
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
function Confirm-NugetPackages {
Write-Verbose "Starting Confirm-NugetPackages."
$expectedNumOfFiles = @{
"MSTest.Sdk" = 15;
"MSTest.Internal.TestFx.Documentation" = 10;
"MSTest.TestFramework" = 130;
"MSTest.TestAdapter" = 76;
"MSTest" = 6;
"MSTest.Analyzers" = 10;
}
$packageDirectory = Resolve-Path "$PSScriptRoot/../artifacts/packages/$configuration"
$tmpDirectory = Resolve-Path "$PSScriptRoot/../artifacts/tmp/$configuration"
$nugetPackages = Get-ChildItem -Filter "*.nupkg" $packageDirectory -Recurse -Exclude "*.symbols.nupkg" | ForEach-Object { $_.FullName }
Write-Verbose "Unzipping NuGet packages."
$unzipNugetPackageDirs = @()
foreach ($nugetPackage in $nugetPackages) {
$unzipNugetPackageDir = $(Join-Path $tmpDirectory (Get-Item $nugetPackage).BaseName)
$unzipNugetPackageDirs += $unzipNugetPackageDir
if (Test-Path -Path $unzipNugetPackageDir) {
Remove-Item -Force -Recurse $unzipNugetPackageDir
}
Unzip $nugetPackage $unzipNugetPackageDir
}
$versionPropsXml = [xml](Get-Content $PSScriptRoot\Versions.props)
$version = $versionPropsXml.Project.PropertyGroup.VersionPrefix | Where-Object { $null -ne $_ } | Select-Object -First 1
if ($null -eq $version) {
throw "version is null"
}
Write-Verbose "Package version is '$version'."
Write-Verbose "Verifying NuGet packages files."
$errors = @()
foreach ($unzipNugetPackageDir in $unzipNugetPackageDirs) {
try {
$packageName = (Get-Item $unzipNugetPackageDir).BaseName
$versionIndex = $packageName.LastIndexOf($version)
if ($versionIndex -lt 0) {
continue
}
$packageKey = $packageName.Substring(0, $versionIndex - 1) # Remove last dot
Write-Verbose "Verifying package '$packageKey'."
$actualNumOfFiles = (Get-ChildItem -Recurse -File -Path $unzipNugetPackageDir).Count
if ($expectedNumOfFiles[$packageKey] -ne $actualNumOfFiles) {
$errors += "Number of files are not equal for '$packageKey', expected: $($expectedNumOfFiles[$packageKey]) actual: $actualNumOfFiles"
}
}
finally {
if (Test-Path $unzipNugetPackageDir) {
Remove-Item -Force -Recurse $unzipNugetPackageDir | Out-Null
}
}
}
if ($errors) {
Write-Error "Validation of NuGet packages failed with $($errors.Count) errors:`n$($errors -join "`n")"
} else {
Write-Host "Successfully validated content of NuGet packages"
}
}
Confirm-NugetPackages