
5 changed files with 107 additions and 139 deletions
@ -1,5 +1,5 @@ |
|||
Addins/ |
|||
Cake/ |
|||
Cake*/ |
|||
GitVersion.CommandLine/ |
|||
packages/ |
|||
nuget.exe |
|||
|
@ -1,189 +1,129 @@ |
|||
########################################################################## |
|||
# This is the Cake bootstrapper script for PowerShell. |
|||
# This file was downloaded from https://github.com/cake-build/resources |
|||
# Feel free to change this file to fit your needs. |
|||
########################################################################## |
|||
|
|||
<# |
|||
|
|||
.SYNOPSIS |
|||
This is a Powershell script to bootstrap a Cake build. |
|||
|
|||
.DESCRIPTION |
|||
This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) |
|||
and execute your Cake build script with the parameters you provide. |
|||
|
|||
.PARAMETER Script |
|||
The build script to execute. |
|||
.PARAMETER Target |
|||
The build script target to run. |
|||
.PARAMETER Configuration |
|||
The build configuration to use. |
|||
.PARAMETER Verbosity |
|||
Specifies the amount of information to be displayed. |
|||
.PARAMETER Experimental |
|||
Tells Cake to use the latest Roslyn release. |
|||
.PARAMETER WhatIf |
|||
Performs a dry run of the build script. |
|||
No tasks will be executed. |
|||
.PARAMETER Mono |
|||
Tells Cake to use the Mono scripting engine. |
|||
.PARAMETER SkipToolPackageRestore |
|||
Skips restoring of packages. |
|||
.PARAMETER ScriptArgs |
|||
Remaining arguments are added here. |
|||
|
|||
.LINK |
|||
http://cakebuild.net |
|||
|
|||
#> |
|||
|
|||
[CmdletBinding()] |
|||
Param( |
|||
[string]$Script = "build.cake", |
|||
[string]$Target = "Default", |
|||
[ValidateSet("Release", "Debug")] |
|||
[string]$Configuration = "Release", |
|||
[ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] |
|||
[string]$Verbosity = "Verbose", |
|||
[switch]$Experimental, |
|||
[Alias("DryRun","Noop")] |
|||
[switch]$WhatIf, |
|||
[switch]$Mono, |
|||
[switch]$SkipToolPackageRestore, |
|||
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] |
|||
[string[]]$ScriptArgs |
|||
) |
|||
|
|||
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null |
|||
function MD5HashFile([string] $filePath) |
|||
$CakeVersion = "0.17.0" |
|||
$DotNetChannel = "preview"; |
|||
$DotNetVersion = "1.0.0-preview2-003121"; |
|||
$DotNetInstallerUri = "https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview2/scripts/obtain/dotnet-install.ps1"; |
|||
$NugetUrl = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" |
|||
|
|||
# Make sure tools folder exists |
|||
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent |
|||
$ToolPath = Join-Path $PSScriptRoot "tools" |
|||
if (!(Test-Path $ToolPath)) { |
|||
Write-Verbose "Creating tools directory..." |
|||
New-Item -Path $ToolPath -Type directory | out-null |
|||
} |
|||
|
|||
########################################################################### |
|||
# INSTALL .NET CORE CLI |
|||
########################################################################### |
|||
|
|||
Function Remove-PathVariable([string]$VariableToRemove) |
|||
{ |
|||
if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf)) |
|||
$path = [Environment]::GetEnvironmentVariable("PATH", "User") |
|||
if ($path -ne $null) |
|||
{ |
|||
return $null |
|||
$newItems = $path.Split(';', [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove } |
|||
[Environment]::SetEnvironmentVariable("PATH", [System.String]::Join(';', $newItems), "User") |
|||
} |
|||
|
|||
[System.IO.Stream] $file = $null; |
|||
[System.Security.Cryptography.MD5] $md5 = $null; |
|||
try |
|||
$path = [Environment]::GetEnvironmentVariable("PATH", "Process") |
|||
if ($path -ne $null) |
|||
{ |
|||
$md5 = [System.Security.Cryptography.MD5]::Create() |
|||
$file = [System.IO.File]::OpenRead($filePath) |
|||
return [System.BitConverter]::ToString($md5.ComputeHash($file)) |
|||
$newItems = $path.Split(';', [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove } |
|||
[Environment]::SetEnvironmentVariable("PATH", [System.String]::Join(';', $newItems), "Process") |
|||
} |
|||
finally |
|||
{ |
|||
if ($file -ne $null) |
|||
{ |
|||
$file.Dispose() |
|||
} |
|||
} |
|||
} |
|||
|
|||
Write-Host "Preparing to run build script..." |
|||
|
|||
if(!$PSScriptRoot){ |
|||
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent |
|||
} |
|||
|
|||
$TOOLS_DIR = Join-Path $PSScriptRoot "tools" |
|||
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" |
|||
$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" |
|||
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" |
|||
$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" |
|||
$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum" |
|||
|
|||
# Should we use mono? |
|||
$UseMono = ""; |
|||
if($Mono.IsPresent) { |
|||
Write-Verbose -Message "Using the Mono based scripting engine." |
|||
$UseMono = "-mono" |
|||
} |
|||
|
|||
# Should we use the new Roslyn? |
|||
$UseExperimental = ""; |
|||
if($Experimental.IsPresent -and !($Mono.IsPresent)) { |
|||
Write-Verbose -Message "Using experimental version of Roslyn." |
|||
$UseExperimental = "-experimental" |
|||
# Get .NET Core CLI path if installed. |
|||
$FoundDotNetCliVersion = $null; |
|||
if (Get-Command dotnet -ErrorAction SilentlyContinue) { |
|||
$FoundDotNetCliVersion = dotnet --version; |
|||
} |
|||
|
|||
# Is this a dry run? |
|||
$UseDryRun = ""; |
|||
if($WhatIf.IsPresent) { |
|||
$UseDryRun = "-dryrun" |
|||
} |
|||
|
|||
# Make sure tools folder exists |
|||
if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { |
|||
Write-Verbose -Message "Creating tools directory..." |
|||
New-Item -Path $TOOLS_DIR -Type directory | out-null |
|||
} |
|||
|
|||
# Make sure that packages.config exist. |
|||
if (!(Test-Path $PACKAGES_CONFIG)) { |
|||
Write-Verbose -Message "Downloading packages.config..." |
|||
try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { |
|||
Throw "Could not download packages.config." |
|||
if($FoundDotNetCliVersion -ne $DotNetVersion) { |
|||
$InstallPath = Join-Path $PSScriptRoot ".dotnet" |
|||
if (!(Test-Path $InstallPath)) { |
|||
mkdir -Force $InstallPath | Out-Null; |
|||
} |
|||
} |
|||
(New-Object System.Net.WebClient).DownloadFile($DotNetInstallerUri, "$InstallPath\dotnet-install.ps1"); |
|||
& $InstallPath\dotnet-install.ps1 -Channel $DotNetChannel -Version $DotNetVersion -InstallDir $InstallPath; |
|||
|
|||
# Try find NuGet.exe in path if not exists |
|||
if (!(Test-Path $NUGET_EXE)) { |
|||
Write-Verbose -Message "Trying to find nuget.exe in PATH..." |
|||
$existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } |
|||
$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 |
|||
if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { |
|||
Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." |
|||
$NUGET_EXE = $NUGET_EXE_IN_PATH.FullName |
|||
} |
|||
Remove-PathVariable "$InstallPath" |
|||
$env:PATH = "$InstallPath;$env:PATH" |
|||
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 |
|||
$env:DOTNET_CLI_TELEMETRY_OPTOUT=1 |
|||
} |
|||
|
|||
# Try download NuGet.exe if not exists |
|||
if (!(Test-Path $NUGET_EXE)) { |
|||
Write-Verbose -Message "Downloading NuGet.exe..." |
|||
try { |
|||
(New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) |
|||
} catch { |
|||
Throw "Could not download NuGet.exe." |
|||
} |
|||
} |
|||
########################################################################### |
|||
# INSTALL NUGET |
|||
########################################################################### |
|||
|
|||
# Save nuget.exe path to environment to be available to child processed |
|||
$ENV:NUGET_EXE = $NUGET_EXE |
|||
|
|||
# Restore tools from NuGet? |
|||
if(-Not $SkipToolPackageRestore.IsPresent) { |
|||
Push-Location |
|||
Set-Location $TOOLS_DIR |
|||
|
|||
# Check for changes in packages.config and remove installed tools if true. |
|||
[string] $md5Hash = MD5HashFile($PACKAGES_CONFIG) |
|||
if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or |
|||
($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) { |
|||
Write-Verbose -Message "Missing or changed package.config hash..." |
|||
Remove-Item * -Recurse -Exclude packages.config,nuget.exe |
|||
} |
|||
# Make sure nuget.exe exists. |
|||
$NugetPath = Join-Path $ToolPath "nuget.exe" |
|||
if (!(Test-Path $NugetPath)) { |
|||
Write-Host "Downloading NuGet.exe..." |
|||
(New-Object System.Net.WebClient).DownloadFile($NugetUrl, $NugetPath); |
|||
} |
|||
|
|||
Write-Verbose -Message "Restoring tools from NuGet..." |
|||
$NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`"" |
|||
########################################################################### |
|||
# INSTALL CAKE |
|||
########################################################################### |
|||
|
|||
# Make sure Cake has been installed. |
|||
$CakePath = Join-Path $ToolPath "Cake.$CakeVersion/Cake.exe" |
|||
if (!(Test-Path $CakePath)) { |
|||
Write-Host "Installing Cake..." |
|||
Invoke-Expression "&`"$NugetPath`" install Cake -Version $CakeVersion -OutputDirectory `"$ToolPath`"" | Out-Null; |
|||
if ($LASTEXITCODE -ne 0) { |
|||
Throw "An error occured while restoring NuGet tools." |
|||
Throw "An error occured while restoring Cake from NuGet." |
|||
} |
|||
else |
|||
{ |
|||
$md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" |
|||
} |
|||
Write-Verbose -Message ($NuGetOutput | out-string) |
|||
Pop-Location |
|||
} |
|||
|
|||
# Make sure that Cake has been installed. |
|||
if (!(Test-Path $CAKE_EXE)) { |
|||
Throw "Could not find Cake.exe at $CAKE_EXE" |
|||
} |
|||
########################################################################### |
|||
# RUN BUILD SCRIPT |
|||
########################################################################### |
|||
|
|||
# Build the argument list. |
|||
$Arguments = @{ |
|||
target=$Target; |
|||
configuration=$Configuration; |
|||
verbosity=$Verbosity; |
|||
dryrun=$WhatIf; |
|||
}.GetEnumerator() | %{"--{0}=`"{1}`"" -f $_.key, $_.value }; |
|||
|
|||
# Start Cake |
|||
Write-Host "Running build script..." |
|||
Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" |
|||
Invoke-Expression "& `"$CakePath`" `"build.cake`" $Arguments $ScriptArgs" |
|||
exit $LASTEXITCODE |
Write
Preview
Loading…
Cancel
Save
Reference in new issue