80 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PowerShell
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PowerShell
		
	
	
		
			Executable File
		
	
	
[CmdletBinding()]
 | 
						|
Param(
 | 
						|
    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
 | 
						|
    [string[]]$BuildArguments
 | 
						|
)
 | 
						|
 | 
						|
Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"
 | 
						|
 | 
						|
Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
 | 
						|
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
 | 
						|
 | 
						|
###########################################################################
 | 
						|
# CONFIGURATION
 | 
						|
###########################################################################
 | 
						|
 | 
						|
$BuildProjectFile = "$PSScriptRoot\build\_build.csproj"
 | 
						|
$TempDirectory = "$PSScriptRoot\\.nuke\temp"
 | 
						|
 | 
						|
$DotNetGlobalFile = "$PSScriptRoot\\global.json"
 | 
						|
$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
 | 
						|
$DotNetChannel = "STS"
 | 
						|
 | 
						|
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
 | 
						|
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
 | 
						|
$env:DOTNET_MULTILEVEL_LOOKUP = 0
 | 
						|
 | 
						|
###########################################################################
 | 
						|
# EXECUTION
 | 
						|
###########################################################################
 | 
						|
 | 
						|
function ExecSafe([scriptblock] $cmd, [int]$maxRetries = 0) {
 | 
						|
    $tryCount = 0
 | 
						|
    while ($true) {
 | 
						|
        $tryCount++
 | 
						|
        & $cmd
 | 
						|
        if ($global:LASTEXITCODE -eq 0) { 
 | 
						|
            break
 | 
						|
        }
 | 
						|
        if ($tryCount -gt $maxRetries) {
 | 
						|
            exit $global:LASTEXITCODE 
 | 
						|
        }  
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# If dotnet CLI is installed globally and it matches requested version, use for execution
 | 
						|
if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and `
 | 
						|
     $(dotnet --version) -and $LASTEXITCODE -eq 0) {
 | 
						|
    $env:DOTNET_EXE = (Get-Command "dotnet").Path
 | 
						|
}
 | 
						|
else {
 | 
						|
    # Download install script
 | 
						|
    $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
 | 
						|
    New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
 | 
						|
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
 | 
						|
    (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)
 | 
						|
 | 
						|
    # If global.json exists, load expected version
 | 
						|
    if (Test-Path $DotNetGlobalFile) {
 | 
						|
        $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)
 | 
						|
        if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) {
 | 
						|
            $DotNetVersion = $DotNetGlobal.sdk.version
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    # Install by channel or version
 | 
						|
    $DotNetDirectory = "$TempDirectory\dotnet-win"
 | 
						|
    if (!(Test-Path variable:DotNetVersion)) {
 | 
						|
        ExecSafe { & $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
 | 
						|
    } else {
 | 
						|
        ExecSafe { & $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
 | 
						|
    }
 | 
						|
    $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
 | 
						|
}
 | 
						|
 | 
						|
Write-Output "Microsoft (R) .NET Core SDK version $(& $env:DOTNET_EXE --version)"
 | 
						|
 | 
						|
ExecSafe { & $env:DOTNET_EXE restore $BuildProjectFile -nologo -clp:NoSummary --verbosity quiet } -maxRetries 2
 | 
						|
ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet --no-restore }
 | 
						|
ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }
 |