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