OpenAPI.NET.OData/build.ps1

238 строки
5.7 KiB
PowerShell

# reference to System.*
$SysDirectory = [System.IO.Directory]
$SysPath = [System.IO.Path]
$SysFile = [System.IO.File]
# Default to Debug
$Configuration = 'Debug'
# Color
$Success = 'Green'
$Warning = 'Yellow'
$Err = 'Red'
if ($args.Count -eq 0)
{
$TestType = 'All'
$Configuration = 'Release'
}
elseif ($args[0] -match 'DisableSkipStrongName')
{
$TestType = "DisableSkipStrongName"
}
elseif ($args[0] -match 'EnableSkipStrongName')
{
$TestType = "EnableSkipStrongName"
}
elseif ($args[0] -match 'SkipStrongName')
{
# SkipStrongName is a legacy options.
$TestType = "EnableSkipStrongName"
}
else
{
Write-Host 'Please choose Test or StrongName!' -ForegroundColor $Err
exit
}
$PROGRAMFILESX86 = [Environment]::GetFolderPath("ProgramFilesX86")
$env:ENLISTMENT_ROOT = Split-Path -Parent $MyInvocation.MyCommand.Definition
$ENLISTMENT_ROOT = Split-Path -Parent $MyInvocation.MyCommand.Definition
# Figure out the directory and path for SN.exe
$SN = $null
$SNx64 = $null
$SNVersions = @()
ForEach ($directory in $SysDirectory::EnumerateDirectories($PROGRAMFILESX86 + "\Microsoft SDKs\Windows", "*A"))
{
# remove the first char 'v'
$directoryName = $SysPath::GetFileName($directory).substring(1)
# remove the last char 'A'
$directoryName = $directoryName.substring(0, $directoryName.LastIndexOf('A'))
# parse to double "10.0"
$versionNo = [System.Double]::Parse($directoryName)
$fileobject = $null
$fileobject = New-Object System.Object
$fileobject | Add-Member -type NoteProperty -Name version -Value $versionNo
$fileobject | Add-Member -type NoteProperty -Name directory -Value $directory
$SNVersions += $fileobject
}
# using the latest version
$SNVersions = $SNVersions | Sort-Object -Property version -Descending
ForEach ($ver in $SNVersions)
{
# only care about the folder has "bin" subfolder
$snBinDirectory = $ver.directory + "\bin"
if(!$SysDirectory::Exists($snBinDirectory))
{
continue
}
if($SysFile::Exists($snBinDirectory + "\sn.exe") -and $SysFile::Exists($snBinDirectory + "\x64\sn.exe"))
{
$SN = $snBinDirectory + "\sn.exe"
$SNx64 = $snBinDirectory + "\x64\sn.exe"
break
}
else
{
ForEach ($netFxDirectory in $SysDirectory::EnumerateDirectories($snBinDirectory, "NETFX * Tools") | Sort -Descending)
{
# currently, sorting descending for the NETFX version looks good.
if($SysFile::Exists($netFxDirectory + "\sn.exe") -and $SysFile::Exists($netFxDirectory + "\x64\sn.exe"))
{
$SN = $netFxDirectory + "\sn.exe"
$SNx64 = $netFxDirectory + "\x64\sn.exe"
break
}
}
}
if ($SN -ne $null -and $SNx64 -ne $null)
{
break
}
}
# Other variables
$ProductProj = $ENLISTMENT_ROOT + "\src\Microsoft.OpenAPI.OData.Reader\Microsoft.OpenApi.OData.Reader.csproj"
$TESTProj = $ENLISTMENT_ROOT + "\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenApi.OData.Reader.Tests.csproj"
$TESTDIR = $ENLISTMENT_ROOT + "\bin\$Configuration\Test\net472"
$PRODUCTDIR = $ENLISTMENT_ROOT + "\bin\$Configuration\net472"
$ProductDlls = "Microsoft.OpenApi.OData.Reader.dll"
$XUnitTestDlls = "Microsoft.OpenApi.OData.Reader.Tests.dll"
Function GetDlls
{
$dlls = @()
ForEach($dll in $ProductDlls)
{
$dlls += $PRODUCTDIR + "\" + $dll
}
ForEach($dll in $XUnitTestDlls)
{
$dlls += $TESTDIR + "\" + $dll
}
return $dlls
}
Function SkipStrongName
{
Write-Host 'Skip strong name validations for Microsoft.OpenApi.OData assemblies...'
$dlls = GetDlls
ForEach ($dll in $dlls)
{
& $SN /Vr $dll
}
ForEach ($dll in $dlls)
{
& $SNx64 /Vr $dll
}
Write-Host "SkipStrongName Done" -ForegroundColor $Success
}
Function DisableSkipStrongName
{
$SnLog = $LOGDIR + "\DisableSkipStrongName.log"
Out-File $SnLog
Write-Host 'Disable skip strong name validations for Microsoft.OpenApi.OData assemblies...'
$dlls = GetDlls
ForEach ($dll in $dlls)
{
& $SN /Vu $dll | Out-File $SnLog -Append
}
ForEach ($dll in $dlls)
{
& $SNx64 /Vu $dll | Out-File $SnLog -Append
}
Write-Host "DisableSkipStrongName Done" -ForegroundColor $Success
}
Function Cleanup
{
#TODO: Add some clean tasks
Write-Host "Clean Done" -ForegroundColor $Success
}
Function CleanBeforeScorch
{
#TODO: Add some clean tasks
Write-Host "Clean Done" -ForegroundColor $Success
}
Function BuildProcess
{
Write-Host '**********Start To Build The Project*********'
$script:BUILD_START_TIME = Get-Date
Write-Host "Build Product ..."
& dotnet.exe build $ProductProj -c $Configuration
Write-Host "Build Test ..."
& dotnet.exe build $TESTProj -c $Configuration
Write-Host "Build Done" -ForegroundColor $Success
$script:BUILD_END_TIME = Get-Date
}
Function TestProcess
{
Write-Host '**********Start To Run The Test*********'
$script:TEST_START_TIME = Get-Date
& dotnet test $TESTProj -c $Configuration
Write-Host "Test Done" -ForegroundColor $Success
$script:TEST_END_TIME = Get-Date
}
# Main Process
if ($TestType -eq 'EnableSkipStrongName')
{
CleanBeforeScorch
BuildProcess
SkipStrongName
Exit
}
elseif ($TestType -eq 'DisableSkipStrongName')
{
CleanBeforeScorch
BuildProcess
DisableSkipStrongName
Exit
}
CleanBeforeScorch
BuildProcess
SkipStrongName
TestProcess
Cleanup
$buildTime = New-TimeSpan $script:BUILD_START_TIME -end $script:BUILD_END_TIME
$testTime = New-TimeSpan $script:TEST_START_TIME -end $script:TEST_END_TIME
Write-Host("Build time:`t" + $buildTime)
Write-Host("Test time:`t" + $testTime)