55# #########################################################################
66
77<#
8+
89. SYNOPSIS
910This is a Powershell script to bootstrap a Cake build.
11+
1012. DESCRIPTION
1113This Powershell script will download NuGet if missing, restore NuGet tools (including Cake)
1214and execute your Cake build script with the parameters you provide.
15+
1316. PARAMETER Script
1417The build script to execute.
1518. PARAMETER Target
@@ -18,19 +21,22 @@ The build script target to run.
1821The build configuration to use.
1922. PARAMETER Verbosity
2023Specifies the amount of information to be displayed.
24+ . PARAMETER ShowDescription
25+ Shows description about tasks.
26+ . PARAMETER DryRun
27+ Performs a dry run.
2128. PARAMETER Experimental
22- Tells Cake to use the latest Roslyn release.
23- . PARAMETER WhatIf
24- Performs a dry run of the build script.
25- No tasks will be executed.
29+ Uses the nightly builds of the Roslyn script engine.
2630. PARAMETER Mono
27- Tells Cake to use the Mono scripting engine.
31+ Uses the Mono Compiler rather than the Roslyn script engine.
2832. PARAMETER SkipToolPackageRestore
2933Skips restoring of packages.
3034. PARAMETER ScriptArgs
3135Remaining arguments are added here.
36+
3237. LINK
33- http://cakebuild.net
38+ https://cakebuild.net
39+
3440#>
3541
3642[CmdletBinding ()]
@@ -41,9 +47,10 @@ Param(
4147 [string ]$Configuration = " Release" ,
4248 [ValidateSet (" Quiet" , " Minimal" , " Normal" , " Verbose" , " Diagnostic" )]
4349 [string ]$Verbosity = " Verbose" ,
50+ [switch ]$ShowDescription ,
51+ [Alias (" WhatIf" , " Noop" )]
52+ [switch ]$DryRun ,
4453 [switch ]$Experimental ,
45- [Alias (" DryRun" , " Noop" )]
46- [switch ]$WhatIf ,
4754 [switch ]$Mono ,
4855 [switch ]$SkipToolPackageRestore ,
4956 [Parameter (Position = 0 , Mandatory = $false , ValueFromRemainingArguments = $true )]
@@ -75,38 +82,31 @@ function MD5HashFile([string] $filePath)
7582 }
7683}
7784
85+ function GetProxyEnabledWebClient
86+ {
87+ $wc = New-Object System.Net.WebClient
88+ $proxy = [System.Net.WebRequest ]::GetSystemWebProxy()
89+ $proxy.Credentials = [System.Net.CredentialCache ]::DefaultCredentials
90+ $wc.Proxy = $proxy
91+ return $wc
92+ }
93+
7894Write-Host " Preparing to run build script..."
7995
8096if (! $PSScriptRoot ){
8197 $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path - Parent
8298}
8399
84100$TOOLS_DIR = Join-Path $PSScriptRoot " tools"
101+ $ADDINS_DIR = Join-Path $TOOLS_DIR " Addins"
102+ $MODULES_DIR = Join-Path $TOOLS_DIR " Modules"
85103$NUGET_EXE = Join-Path $TOOLS_DIR " nuget.exe"
86104$CAKE_EXE = Join-Path $TOOLS_DIR " Cake/Cake.exe"
87105$NUGET_URL = " https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
88106$PACKAGES_CONFIG = Join-Path $TOOLS_DIR " packages.config"
89107$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR " packages.config.md5sum"
90-
91- # Should we use mono?
92- $UseMono = " " ;
93- if ($Mono.IsPresent ) {
94- Write-Verbose - Message " Using the Mono based scripting engine."
95- $UseMono = " -mono"
96- }
97-
98- # Should we use the new Roslyn?
99- $UseExperimental = " " ;
100- if ($Experimental.IsPresent -and ! ($Mono.IsPresent )) {
101- Write-Verbose - Message " Using experimental version of Roslyn."
102- $UseExperimental = " -experimental"
103- }
104-
105- # Is this a dry run?
106- $UseDryRun = " " ;
107- if ($WhatIf.IsPresent ) {
108- $UseDryRun = " -dryrun"
109- }
108+ $ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR " packages.config"
109+ $MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR " packages.config"
110110
111111# Make sure tools folder exists
112112if ((Test-Path $PSScriptRoot ) -and ! (Test-Path $TOOLS_DIR )) {
@@ -116,16 +116,18 @@ if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
116116
117117# Make sure that packages.config exist.
118118if (! (Test-Path $PACKAGES_CONFIG )) {
119- Write-Verbose - Message " Downloading packages.config..."
120- try { (New-Object System.Net.WebClient).DownloadFile(" http://cakebuild.net/download/bootstrapper/packages" , $PACKAGES_CONFIG ) } catch {
119+ Write-Verbose - Message " Downloading packages.config..."
120+ try {
121+ $wc = GetProxyEnabledWebClient
122+ $wc.DownloadFile (" https://cakebuild.net/download/bootstrapper/packages" , $PACKAGES_CONFIG ) } catch {
121123 Throw " Could not download packages.config."
122124 }
123125}
124126
125127# Try find NuGet.exe in path if not exists
126128if (! (Test-Path $NUGET_EXE )) {
127129 Write-Verbose - Message " Trying to find nuget.exe in PATH..."
128- $existingPaths = $Env: Path -Split ' ;' | Where-Object { (! [string ]::IsNullOrEmpty($_ )) -and (Test-Path $_ ) }
130+ $existingPaths = $Env: Path -Split ' ;' | Where-Object { (! [string ]::IsNullOrEmpty($_ )) -and (Test-Path $_ - PathType Container ) }
129131 $NUGET_EXE_IN_PATH = Get-ChildItem - Path $existingPaths - Filter " nuget.exe" | Select - First 1
130132 if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName )) {
131133 Write-Verbose - Message " Found in PATH at $ ( $NUGET_EXE_IN_PATH.FullName ) ."
@@ -137,7 +139,8 @@ if (!(Test-Path $NUGET_EXE)) {
137139if (! (Test-Path $NUGET_EXE )) {
138140 Write-Verbose - Message " Downloading NuGet.exe..."
139141 try {
140- (New-Object System.Net.WebClient).DownloadFile($NUGET_URL , $NUGET_EXE )
142+ $wc = GetProxyEnabledWebClient
143+ $wc.DownloadFile ($NUGET_URL , $NUGET_EXE )
141144 } catch {
142145 Throw " Could not download NuGet.exe."
143146 }
@@ -160,16 +163,51 @@ if(-Not $SkipToolPackageRestore.IsPresent) {
160163 }
161164
162165 Write-Verbose - Message " Restoring tools from NuGet..."
163- $NuGetOutput = Invoke-Expression " &`" $NUGET_EXE `" install -ExcludeVersion -PreRelease - OutputDirectory `" $TOOLS_DIR `" -Source https://www.myget.org/F/cake/api/v3/index.json "
166+ $NuGetOutput = Invoke-Expression " &`" $NUGET_EXE `" install -ExcludeVersion -OutputDirectory `" $TOOLS_DIR `" "
164167
165168 if ($LASTEXITCODE -ne 0 ) {
166- Throw " An error occured while restoring NuGet tools."
169+ Throw " An error occurred while restoring NuGet tools."
167170 }
168171 else
169172 {
170173 $md5Hash | Out-File $PACKAGES_CONFIG_MD5 - Encoding " ASCII"
171174 }
172175 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+
173211 Pop-Location
174212}
175213
@@ -178,7 +216,20 @@ if (!(Test-Path $CAKE_EXE)) {
178216 Throw " Could not find Cake.exe at $CAKE_EXE "
179217}
180218
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+
181232# Start Cake
182233Write-Host " Running build script..."
183- Invoke-Expression " & `" $CAKE_EXE `" `" $Script `" -target= `" $Target `" -configuration= `" $Configuration `" -verbosity= `" $Verbosity `" $UseMono $UseDryRun $UseExperimental $ScriptArgs "
184- exit $LASTEXITCODE
234+ & $CAKE_EXE $cakeArguments
235+ exit $LASTEXITCODE
0 commit comments