mirror of
https://github.com/aphrody-labs/NuGet.Client.git
synced 2026-10-14 05:19:04 +00:00
193 lines
6.6 KiB
PowerShell
193 lines
6.6 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Creates a package containing NuGet client EndToEnd test data.
|
|
|
|
.PARAMETER configuration
|
|
The build configuration. The default value is 'debug'.
|
|
|
|
.PARAMETER toolsetVersion
|
|
The toolset version. The default value is 15.
|
|
|
|
.PARAMETER outputDirectoryPath
|
|
The output directory where the test data package will be created. The default value is the current directory.
|
|
|
|
.EXAMPLE
|
|
.\CreateTestDataPackage.ps1 -configuration 'debug' -toolsetVersion 15 -outputDirectoryPath 'C:\git\NuGet.Client\artifacts\nupkgs'
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param (
|
|
[ValidateSet('debug', 'release')]
|
|
[string] $configuration = 'debug',
|
|
[ValidateSet(15, 16, 17)]
|
|
[int] $toolsetVersion = 15,
|
|
[string] $outputDirectoryPath = $PWD
|
|
)
|
|
|
|
. "$PSScriptRoot\..\common.ps1"
|
|
|
|
$packageId = 'NuGet.Client.EndToEnd.TestData'
|
|
|
|
Function Get-DirectoryPath([string[]] $pathParts)
|
|
{
|
|
Return [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($pathParts))
|
|
}
|
|
|
|
Set-Variable repositoryRootDirectoryPath -Option Constant -Value $(Get-DirectoryPath($PSScriptRoot, '..', '..'))
|
|
|
|
Function Get-Directory([string[]] $pathParts)
|
|
{
|
|
$directoryPath = Get-DirectoryPath($pathParts)
|
|
|
|
Return [System.IO.DirectoryInfo]::new($directoryPath)
|
|
}
|
|
|
|
Function Get-File([string[]] $pathParts)
|
|
{
|
|
$filePath = [System.IO.Path]::Combine($pathParts)
|
|
|
|
$file = [System.IO.FileInfo]::new($filePath)
|
|
|
|
If (-Not $file.Exists)
|
|
{
|
|
throw [System.IO.FileNotFoundException]::new("Could not find $($file.Name) at $($file.FullName). Please build first.", $file.FullName)
|
|
}
|
|
|
|
Return $file
|
|
}
|
|
|
|
Function Get-GenerateTestPackagesFile()
|
|
{
|
|
Return Get-File($repositoryRootDirectoryPath, 'artifacts', 'GenerateTestPackages', "$toolsetVersion.0", 'bin', $configuration, 'net472', 'GenerateTestPackages.exe')
|
|
}
|
|
|
|
Function Get-NuGetFile()
|
|
{
|
|
Return Get-File($repositoryRootDirectoryPath, 'artifacts', 'VS15', 'nuget.exe')
|
|
}
|
|
|
|
Function Create-TestPackages(
|
|
[Parameter(Mandatory = $True)] [System.IO.DirectoryInfo] $sourceDirectory,
|
|
[Parameter(Mandatory = $False)] [System.IO.DirectoryInfo] $destinationDirectory)
|
|
{
|
|
$generateTestPackagesFile = Get-GenerateTestPackagesFile
|
|
$testDirectories = $sourceDirectory.GetDirectories()
|
|
|
|
$testDirectories | %{
|
|
$testDirectory = $_
|
|
$packagesDirectory = Get-Directory($testDirectory.FullName, 'Packages')
|
|
$assembliesDirectory = Get-Directory($testDirectory.FullName, 'Assemblies')
|
|
|
|
Remove-Item -Path $packagesDirectory.FullName -Recurse -Force -ErrorAction Ignore
|
|
Remove-Item -Path $assembliesDirectory.FullName -Recurse -Force -ErrorAction Ignore
|
|
|
|
Get-ChildItem "$($testDirectory.FullName)\*" -Include *.dgml,*.nuspec | %{
|
|
$file = $_
|
|
|
|
Write-Host "Running $($generateTestPackagesFile.Name) on $($file.FullName)... " -NoNewLine
|
|
|
|
$startInfo = [System.Diagnostics.ProcessStartInfo]::new()
|
|
$startInfo.FileName = $generateTestPackagesFile.FullName
|
|
$startInfo.WorkingDirectory = $testDirectory.FullName
|
|
$startInfo.UseShellExecute = $False
|
|
$startInfo.RedirectStandardError = $True
|
|
$startInfo.RedirectStandardOutput = $True
|
|
$startInfo.Arguments = $file.FullName
|
|
|
|
$process = [System.Diagnostics.Process]::new()
|
|
$process.StartInfo = $startInfo
|
|
$process.Start() | Out-Null
|
|
$process.WaitForExit()
|
|
|
|
$stdout = $process.StandardOutput.ReadToEnd()
|
|
$stderr = $process.StandardError.ReadToEnd()
|
|
|
|
If ($process.ExitCode -eq 0)
|
|
{
|
|
Write-Host 'Success.'
|
|
|
|
If ($destinationDirectory)
|
|
{
|
|
$packagesDirectory.GetFiles('*.nupkg') | %{
|
|
$packageFile = $_
|
|
|
|
Move-Item -Path $packageFile.FullName -Destination $destinationDirectory.FullName -Force
|
|
}
|
|
|
|
Remove-Item -Path $packagesDirectory.FullName -Recurse -Force -ErrorAction Ignore
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Write-Error "Failed. Exit code is $($process.ExitCode)."
|
|
Write-Host "Output stream: $stdout"
|
|
Write-Host "Error stream: $stderr"
|
|
}
|
|
}
|
|
|
|
Remove-Item -Path $assembliesDirectory.FullName -Recurse -Force -ErrorAction Ignore
|
|
}
|
|
}
|
|
|
|
Function Create-TestDataPackage([Parameter(Mandatory = $True)] [System.IO.FileInfo] $nuspecFile)
|
|
{
|
|
$nugetFile = Get-NuGetFile
|
|
|
|
$outputDirectory = [System.IO.DirectoryInfo]::new([System.IO.Path]::GetFullPath($outputDirectoryPath))
|
|
|
|
$outputDirectory.Create()
|
|
|
|
$process = Start-Process `
|
|
-FilePath $nugetFile.FullName `
|
|
-WorkingDirectory $nuspecFile.DirectoryName `
|
|
-WindowStyle Hidden `
|
|
-PassThru `
|
|
-Wait `
|
|
-ArgumentList 'pack', $nuspecFile.FullName, "-OutputDirectory `"$($outputDirectory.FullName)`"", '-NoDefaultExcludes', '-NonInteractive'
|
|
|
|
If ($process.ExitCode -eq 0)
|
|
{
|
|
$packageFiles = $outputDirectory.GetFiles("$packageId`.*.nupkg", [System.IO.SearchOption]::TopDirectoryOnly)
|
|
$packageFile = $packageFiles[0]
|
|
|
|
Write-Host "Created test data package at $($packageFile.FullName)."
|
|
}
|
|
else
|
|
{
|
|
Write-Error "$($nugetFile.Name) failed. Exit code is $($process.ExitCode)."
|
|
}
|
|
}
|
|
|
|
$workingDirectoryPath = New-TempDir
|
|
$workingDirectory = [System.IO.DirectoryInfo]::new($workingDirectoryPath)
|
|
|
|
Try
|
|
{
|
|
$sourceDirectory = Get-Directory($repositoryRootDirectoryPath, 'test', 'EndToEnd', 'Packages')
|
|
$packagesDirectory = Get-Directory($WorkingDirectory.FullName, 'Packages')
|
|
|
|
Write-Verbose "Copying all test data from '$TestSource' to '$($packagesDirectory.FullName)'"
|
|
& robocopy $sourceDirectory.FullName $packagesDirectory.FullName /MIR
|
|
|
|
# RoboCopy returns a variety of error codes. This is the only one we care about and it means "copy completed successfully";
|
|
# however, to PowerShell a non-zero exit code is a failure.
|
|
If ($LASTEXITCODE -eq 1)
|
|
{
|
|
$LASTEXITCODE = 0
|
|
}
|
|
|
|
$nuspecFile = Get-File($repositoryRootDirectoryPath, 'test', 'EndToEnd', "$packageId.nuspec")
|
|
|
|
$nuspecFile = Copy-Item -Path $nuspecFile.FullName -Destination $workingDirectory.FullName -Force -PassThru
|
|
Write-Host $nuspecFile.FullName
|
|
Create-TestPackages -sourceDirectory $packagesDirectory
|
|
|
|
$sharedDirectory = Get-Directory($packagesDirectory.FullName, '_Shared')
|
|
Create-TestPackages -sourceDirectory $sharedDirectory -destinationDirectory $workingDirectory
|
|
|
|
Create-TestDataPackage $nuspecFile
|
|
}
|
|
Finally
|
|
{
|
|
Remove-Item -Path $workingDirectory.FullName -Recurse -Force -ErrorAction Ignore
|
|
} |