quartznet
/
build.ps1
74 строки · 3.1 Кб
1[CmdletBinding()]
2Param(
3[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
4[string[]]$BuildArguments
5)
6
7Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"
8
9Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
10$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
11
12###########################################################################
13# CONFIGURATION
14###########################################################################
15
16$BuildProjectFile = "$PSScriptRoot\build\_build.csproj"
17$TempDirectory = "$PSScriptRoot\\.nuke\temp"
18
19$DotNetGlobalFile = "$PSScriptRoot\\global.json"
20$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
21$DotNetChannel = "STS"
22
23$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
24$env:DOTNET_NOLOGO = 1
25
26###########################################################################
27# EXECUTION
28###########################################################################
29
30function ExecSafe([scriptblock] $cmd) {
31& $cmd
32if ($LASTEXITCODE) { exit $LASTEXITCODE }
33}
34
35# If dotnet CLI is installed globally and it matches requested version, use for execution
36if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and `
37$(dotnet --version) -and $LASTEXITCODE -eq 0) {
38$env:DOTNET_EXE = (Get-Command "dotnet").Path
39}
40else {
41# Download install script
42$DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
43New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
44[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
45(New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)
46
47# If global.json exists, load expected version
48if (Test-Path $DotNetGlobalFile) {
49$DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)
50if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) {
51$DotNetVersion = $DotNetGlobal.sdk.version
52}
53}
54
55# Install by channel or version
56$DotNetDirectory = "$TempDirectory\dotnet-win"
57if (!(Test-Path variable:DotNetVersion)) {
58ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
59} else {
60ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
61}
62$env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
63$env:PATH = "$DotNetDirectory;$env:PATH"
64}
65
66Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)"
67
68if (Test-Path env:NUKE_ENTERPRISE_TOKEN) {
69& $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null
70& $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null
71}
72
73ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet }
74ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }
75