|
1 |
| -########################################################################## |
2 |
| -# This is the Cake bootstrapper script for PowerShell. |
3 |
| -# This file was downloaded from https://github.com/cake-build/resources |
4 |
| -# Feel free to change this file to fit your needs. |
5 |
| -########################################################################## |
| 1 | +$ErrorActionPreference = 'Stop' |
6 | 2 |
|
7 |
| -<# |
| 3 | +Set-Location -LiteralPath $PSScriptRoot |
8 | 4 |
|
9 |
| -.SYNOPSIS |
10 |
| -This is a Powershell script to bootstrap a Cake build. |
| 5 | +$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1' |
| 6 | +$env:DOTNET_CLI_TELEMETRY_OPTOUT = '1' |
| 7 | +$env:DOTNET_NOLOGO = '1' |
11 | 8 |
|
12 |
| -.DESCRIPTION |
13 |
| -This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) |
14 |
| -and execute your Cake build script with the parameters you provide. |
| 9 | +dotnet tool restore |
| 10 | +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } |
15 | 11 |
|
16 |
| -.PARAMETER Script |
17 |
| -The build script to execute. |
18 |
| -.PARAMETER Target |
19 |
| -The build script target to run. |
20 |
| -.PARAMETER Configuration |
21 |
| -The build configuration to use. |
22 |
| -.PARAMETER Verbosity |
23 |
| -Specifies the amount of information to be displayed. |
24 |
| -.PARAMETER ShowDescription |
25 |
| -Shows description about tasks. |
26 |
| -.PARAMETER DryRun |
27 |
| -Performs a dry run. |
28 |
| -.PARAMETER Experimental |
29 |
| -Uses the nightly builds of the Roslyn script engine. |
30 |
| -.PARAMETER Mono |
31 |
| -Uses the Mono Compiler rather than the Roslyn script engine. |
32 |
| -.PARAMETER SkipToolPackageRestore |
33 |
| -Skips restoring of packages. |
34 |
| -.PARAMETER ScriptArgs |
35 |
| -Remaining arguments are added here. |
36 |
| -
|
37 |
| -.LINK |
38 |
| -https://cakebuild.net |
39 |
| -
|
40 |
| -#> |
41 |
| - |
42 |
| -[CmdletBinding()] |
43 |
| -Param( |
44 |
| - [string]$Script = "build.cake", |
45 |
| - [string]$Target, |
46 |
| - [string]$Configuration, |
47 |
| - [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] |
48 |
| - [string]$Verbosity, |
49 |
| - [switch]$ShowDescription, |
50 |
| - [Alias("WhatIf", "Noop")] |
51 |
| - [switch]$DryRun, |
52 |
| - [switch]$Experimental, |
53 |
| - [switch]$Mono, |
54 |
| - [switch]$SkipToolPackageRestore, |
55 |
| - [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] |
56 |
| - [string[]]$ScriptArgs |
57 |
| -) |
58 |
| - |
59 |
| -[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null |
60 |
| -function MD5HashFile([string] $filePath) |
61 |
| -{ |
62 |
| - if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf)) |
63 |
| - { |
64 |
| - return $null |
65 |
| - } |
66 |
| - |
67 |
| - [System.IO.Stream] $file = $null; |
68 |
| - [System.Security.Cryptography.MD5] $md5 = $null; |
69 |
| - try |
70 |
| - { |
71 |
| - $md5 = [System.Security.Cryptography.MD5]::Create() |
72 |
| - $file = [System.IO.File]::OpenRead($filePath) |
73 |
| - return [System.BitConverter]::ToString($md5.ComputeHash($file)) |
74 |
| - } |
75 |
| - finally |
76 |
| - { |
77 |
| - if ($file -ne $null) |
78 |
| - { |
79 |
| - $file.Dispose() |
80 |
| - } |
81 |
| - } |
82 |
| -} |
83 |
| - |
84 |
| -function GetProxyEnabledWebClient |
85 |
| -{ |
86 |
| - $wc = New-Object System.Net.WebClient |
87 |
| - $proxy = [System.Net.WebRequest]::GetSystemWebProxy() |
88 |
| - $proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials |
89 |
| - $wc.Proxy = $proxy |
90 |
| - return $wc |
91 |
| -} |
92 |
| - |
93 |
| -Write-Host "Preparing to run build script..." |
94 |
| - |
95 |
| -if(!$PSScriptRoot){ |
96 |
| - $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent |
97 |
| -} |
98 |
| - |
99 |
| -$TOOLS_DIR = Join-Path $PSScriptRoot "tools" |
100 |
| -$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins" |
101 |
| -$MODULES_DIR = Join-Path $TOOLS_DIR "Modules" |
102 |
| -$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" |
103 |
| -$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" |
104 |
| -$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" |
105 |
| -$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" |
106 |
| -$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum" |
107 |
| -$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config" |
108 |
| -$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config" |
109 |
| - |
110 |
| -# Make sure tools folder exists |
111 |
| -if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { |
112 |
| - Write-Verbose -Message "Creating tools directory..." |
113 |
| - New-Item -Path $TOOLS_DIR -Type directory | out-null |
114 |
| -} |
115 |
| - |
116 |
| -# Make sure that packages.config exist. |
117 |
| -if (!(Test-Path $PACKAGES_CONFIG)) { |
118 |
| - Write-Verbose -Message "Downloading packages.config..." |
119 |
| - try { |
120 |
| - $wc = GetProxyEnabledWebClient |
121 |
| - $wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { |
122 |
| - Throw "Could not download packages.config." |
123 |
| - } |
124 |
| -} |
125 |
| - |
126 |
| -# Try find NuGet.exe in path if not exists |
127 |
| -if (!(Test-Path $NUGET_EXE)) { |
128 |
| - Write-Verbose -Message "Trying to find nuget.exe in PATH..." |
129 |
| - $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) } |
130 |
| - $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 |
131 |
| - if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { |
132 |
| - Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." |
133 |
| - $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName |
134 |
| - } |
135 |
| -} |
136 |
| - |
137 |
| -# Try download NuGet.exe if not exists |
138 |
| -if (!(Test-Path $NUGET_EXE)) { |
139 |
| - Write-Verbose -Message "Downloading NuGet.exe..." |
140 |
| - try { |
141 |
| - $wc = GetProxyEnabledWebClient |
142 |
| - $wc.DownloadFile($NUGET_URL, $NUGET_EXE) |
143 |
| - } catch { |
144 |
| - Throw "Could not download NuGet.exe." |
145 |
| - } |
146 |
| -} |
147 |
| - |
148 |
| -# Save nuget.exe path to environment to be available to child processed |
149 |
| -$ENV:NUGET_EXE = $NUGET_EXE |
150 |
| - |
151 |
| -# Restore tools from NuGet? |
152 |
| -if(-Not $SkipToolPackageRestore.IsPresent) { |
153 |
| - Push-Location |
154 |
| - Set-Location $TOOLS_DIR |
155 |
| - |
156 |
| - # Check for changes in packages.config and remove installed tools if true. |
157 |
| - [string] $md5Hash = MD5HashFile($PACKAGES_CONFIG) |
158 |
| - if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or |
159 |
| - ($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) { |
160 |
| - Write-Verbose -Message "Missing or changed package.config hash..." |
161 |
| - Get-ChildItem -Exclude packages.config,nuget.exe,Cake.Bakery | |
162 |
| - Remove-Item -Recurse |
163 |
| - } |
164 |
| - |
165 |
| - Write-Verbose -Message "Restoring tools from NuGet..." |
166 |
| - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`"" |
167 |
| - |
168 |
| - if ($LASTEXITCODE -ne 0) { |
169 |
| - Throw "An error occurred while restoring NuGet tools." |
170 |
| - } |
171 |
| - else |
172 |
| - { |
173 |
| - $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" |
174 |
| - } |
175 |
| - Write-Verbose -Message ($NuGetOutput | out-string) |
176 |
| - |
177 |
| - Pop-Location |
178 |
| -} |
179 |
| - |
180 |
| -# Restore addins from NuGet |
181 |
| -if (Test-Path $ADDINS_PACKAGES_CONFIG) { |
182 |
| - Push-Location |
183 |
| - Set-Location $ADDINS_DIR |
184 |
| - |
185 |
| - Write-Verbose -Message "Restoring addins from NuGet..." |
186 |
| - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`"" |
187 |
| - |
188 |
| - if ($LASTEXITCODE -ne 0) { |
189 |
| - Throw "An error occurred while restoring NuGet addins." |
190 |
| - } |
191 |
| - |
192 |
| - Write-Verbose -Message ($NuGetOutput | out-string) |
193 |
| - |
194 |
| - Pop-Location |
195 |
| -} |
196 |
| - |
197 |
| -# Restore modules from NuGet |
198 |
| -if (Test-Path $MODULES_PACKAGES_CONFIG) { |
199 |
| - Push-Location |
200 |
| - Set-Location $MODULES_DIR |
201 |
| - |
202 |
| - Write-Verbose -Message "Restoring modules from NuGet..." |
203 |
| - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`"" |
204 |
| - |
205 |
| - if ($LASTEXITCODE -ne 0) { |
206 |
| - Throw "An error occurred while restoring NuGet modules." |
207 |
| - } |
208 |
| - |
209 |
| - Write-Verbose -Message ($NuGetOutput | out-string) |
210 |
| - |
211 |
| - Pop-Location |
212 |
| -} |
213 |
| - |
214 |
| -# Make sure that Cake has been installed. |
215 |
| -if (!(Test-Path $CAKE_EXE)) { |
216 |
| - Throw "Could not find Cake.exe at $CAKE_EXE" |
217 |
| -} |
218 |
| - |
219 |
| - |
220 |
| - |
221 |
| -# Build Cake arguments |
222 |
| -$cakeArguments = @("$Script"); |
223 |
| -if ($Target) { $cakeArguments += "-target=$Target" } |
224 |
| -if ($Configuration) { $cakeArguments += "-configuration=$Configuration" } |
225 |
| -if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" } |
226 |
| -if ($ShowDescription) { $cakeArguments += "-showdescription" } |
227 |
| -if ($DryRun) { $cakeArguments += "-dryrun" } |
228 |
| -if ($Experimental) { $cakeArguments += "-experimental" } |
229 |
| -if ($Mono) { $cakeArguments += "-mono" } |
230 |
| -$cakeArguments += $ScriptArgs |
231 |
| - |
232 |
| -# Start Cake |
233 |
| -Write-Host "Running build script..." |
234 |
| -&$CAKE_EXE $cakeArguments |
235 |
| -exit $LASTEXITCODE |
| 12 | +dotnet cake @args |
| 13 | +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } |
0 commit comments