Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verify architecture and version of produced exes #5134

Merged
merged 3 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions eng/verify-nupkgs-exe-version.ps1

This file was deleted.

90 changes: 0 additions & 90 deletions eng/verify-nupkgs-exe.ps1

This file was deleted.

154 changes: 150 additions & 4 deletions eng/verify-nupkgs.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,9 @@ function Verify-Nuget-Packages {
}
}
finally {
if ($null -ne $unzipNugetPackageDir -and (Test-Path $unzipNugetPackageDir)) {
Remove-Item -Force -Recurse $unzipNugetPackageDir | Out-Null
}
# if ($null -ne $unzipNugetPackageDir -and (Test-Path $unzipNugetPackageDir)) {
# Remove-Item -Force -Recurse $unzipNugetPackageDir | Out-Null
# }
}
}

Expand All @@ -109,6 +109,7 @@ function Verify-Nuget-Packages {
}

Write-Host "Completed Verify-Nuget-Packages."
$unzipNugetPackageDirs
}

function Unzip {
Expand Down Expand Up @@ -156,4 +157,149 @@ function Verify-Version {
Match-VersionAgainstBranch -vsTestVersion $vsTestProductVersion -branchName $currentBranch -errors $errors
}

Verify-Nuget-Packages
function Verify-NugetPackageExe {
param(
[Parameter(Mandatory)]
[ValidateSet("Debug", "Release")]
[string] $configuration,
$UnzipNugetPackages
)


$exclusions = @{
"CodeCoverage\CodeCoverage.exe" = "x86"
"Dynamic Code Coverage Tools\CodeCoverage.exe" = "x86"
"amd64\CodeCoverage.exe" = "x64"

"IntelliTrace.exe" = "x86"
"ProcessSnapshotCleanup.exe" = "x86-64"
"TDEnvCleanup.exe" = "x86"

"TestPlatform\SettingsMigrator.exe" = "x86"

"dump\DumpMinitool.exe" = "x86-64"

"QTAgent32.exe" = "x86"
"QTAgent32_35.exe" = "x86"
"QTAgent32_40.exe" = "x86"
"QTDCAgent32.exe" = "x86"

"V1\VSTestVideoRecorder.exe" = "x86"
"VideoRecorder\VSTestVideoRecorder.exe" = "x86"
}

$errs = @()
$exes = $UnzipNugetPackages | Get-ChildItem -Filter *.exe -Recurse -Force
if (0 -eq @($exes).Length) {
throw "No exe files were found."
}

# use wow programfiles because they always point to x64 programfiles where VS is installed
$dumpBin = Get-ChildItem -Recurse -Force -Filter dumpbin.exe -path "$env:ProgramW6432\Microsoft Visual Studio\2022\Enterprise" | Select-Object -First 1
if (-not $dumpBin) {
throw "Did not find dumpbin.exe in '$env:ProgramW6432\Microsoft Visual Studio\2022\Enterprise'."
}

$corFlags = Get-ChildItem -Recurse -Force -Filter CorFlags.exe -path "${env:ProgramFiles(x86)}\Microsoft SDKs\Windows" | Select-Object -First 1
if (-not $corFlags) {
throw "Did not find CorFlags.exe in '${env:ProgramFiles(x86)}\Microsoft SDKs\Windows'."
}

$exes | ForEach-Object {
$m = & $dumpBin /headers $_.FullName | Select-String "machine \((.*)\)"
if (-not $m.Matches.Success) {
$err = "Did not find the platform of the exe $fullName)."
}

$platform = $m.Matches.Groups[1].Value
$fullName = $_.FullName
$name = $_.Name

if ("x86" -eq $platform) {
$corFlagsOutput = & $corFlags $fullName
# this is an native x86 exe or a .net x86 that requires of prefers 32bit
$platform = if ($corFlagsOutput -like "*does not have a valid managed header*" -or $corFlagsOutput -like "*32BITREQ : 1*" -or $corFlagsOutput -like "*32BITPREF : 1*") {
# this is an native x86 exe or a .net x86 that requires of prefers 32bit
"x86" } else {
# this is a x86 executable that is built as AnyCpu and does not prefer 32-bit so it will run as x64 on 64-bit system.
"x86-64" }
}

if (($pair = $exclusions.GetEnumerator() | Where-Object { $fullName -like "*$($_.Name)" })) {
if (1 -lt $($pair).Count) {
$err = "Too many paths matched the query, only one match is allowed. Matches: $($pair.Name)"
$errs += $err
Write-Host -ForegroundColor Red Error: $err
}

if ($platform -ne $pair.Value) {
$err = "$fullName must have architecture $($pair.Value), but it was $platform."
$errs += $err
Write-Host -ForegroundColor Red Error: $err
}
}
elseif ("x86" -eq $platform) {
if ($name -notlike "*x86*") {
$err = "$fullName has architecture $platform, and must contain x86 in the name of the executable."
$errs += $err
Write-Host -ForegroundColor Red Error: $err
}
}
elseif ($platform -in "x64", "x86-64") {
if ($name -like "*x86*" -or $name -like "*arm64*") {
$err = "$fullName has architecture $platform, and must NOT contain x86 or arm64 in the name of the executable."
$errs += $err
Write-Host -ForegroundColor Red Error: $err
}
}
elseif ("arm64" -eq $platform) {
if ($name -notlike "*arm64*") {
$err = "$fullName has architecture $platform, and must contain arm64 in the name of the executable."
$errs += $err
Write-Host -ForegroundColor Red Error: $err
}
}
else {
$err = "$fullName has unknown architecture $platform."
$errs += $err
Write-Host -ForegroundColor Red $err
}

"Success: $name is $platform - $fullName"
}

if ($errs) {
throw "Fail!:`n$($errs -join "`n")"
}
}

function Verify-NugetPackageVersion {
param(
[Parameter(Mandatory)]
[ValidateSet("Debug", "Release")]
[string] $configuration,
$UnzipNugetPackages
)

$exes = $UnzipNugetPackages | Get-ChildItem -Filter vstest.console.exe -Recurse -Force
if (0 -eq @($exes).Length) {
throw "No vstest.console.exe was found."
}

$exes | ForEach-Object {
if ($_.VersionInfo.ProductVersion.Contains("+")) {
throw "Some files contain '+' in the ProductVersion, this breaks DTAAgent in AzDO."
}
else {
"$_ version $($_.VersionInfo.ProductVersion) is ok."
}
}

}


$unzipNugetPackages = Verify-Nuget-Packages
Start-sleep -Seconds 10
# skipped, it is hard to find the right dumpbin.exe and corflags tools on server
# Verify-NugetPackageExe -configuration $configuration -UnzipNugetPackages $unzipNugetPackages
Verify-NugetPackageVersion -configuration $configuration -UnzipNugetPackages $unzipNugetPackages
Loading