2016-02-02 10:04:50 -08:00
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
param (
2016-02-16 12:04:13 -08:00
[ string ] $Configuration = " Debug " ,
2016-02-23 18:04:49 -08:00
[ string ] $Architecture = " x64 " ,
2016-02-26 18:14:01 -08:00
[ string[] ] $Targets = @ ( " Default " ) ,
2016-02-16 12:22:25 -08:00
[ switch ] $NoPackage ,
[ switch ] $Help )
if ( $Help )
{
2016-05-11 17:20:40 -07:00
Write-Host " Usage: .\build.ps1 [-Configuration <CONFIGURATION>] [-NoPackage] [-Help] [-Targets <TARGETS...>] "
2016-02-16 12:22:25 -08:00
Write-Host " "
Write-Host " Options: "
Write-Host " -Configuration <CONFIGURATION> Build the specified Configuration (Debug or Release, default: Debug) "
2016-02-23 18:04:49 -08:00
Write-Host " -Architecture <ARCHITECTURE> Build the specified architecture (x64 or x86 (supported only on Windows), default: x64) "
2016-02-26 18:14:01 -08:00
Write-Host " -Targets <TARGETS...> Comma separated build targets to run (Init, Compile, Publish, etc.; Default is a full build and publish) "
2016-02-16 12:22:25 -08:00
Write-Host " -NoPackage Skip packaging targets "
Write-Host " -Help Display this help message "
exit 0
}
2016-02-02 10:04:50 -08:00
$env:CONFIGURATION = $Configuration ;
2016-05-11 17:20:40 -07:00
$RepoRoot = " $PSScriptRoot \..\.. "
2016-02-02 10:04:50 -08:00
2016-02-16 12:04:13 -08:00
if ( $NoPackage )
{
$env:DOTNET_BUILD_SKIP_PACKAGING = 1
}
else
{
$env:DOTNET_BUILD_SKIP_PACKAGING = 0
}
2016-02-02 10:04:50 -08:00
# Load Branch Info
2016-05-11 17:20:40 -07:00
cat " $RepoRoot \branchinfo.txt " | ForEach-Object {
2016-02-02 10:04:50 -08:00
if ( ! $_ . StartsWith ( " # " ) -and ! [ String ] :: IsNullOrWhiteSpace ( $_ ) ) {
$splat = $_ . Split ( [ char[] ] @ ( " = " ) , 2 )
Set-Content " env:\ $( $splat [ 0 ] ) " -Value $splat [ 1 ]
}
}
# Use a repo-local install directory (but not the artifacts directory because that gets cleaned a lot
if ( ! $env:DOTNET_INSTALL_DIR )
{
2016-05-11 17:20:40 -07:00
$env:DOTNET_INSTALL_DIR = " $RepoRoot \.dotnet_stage0\Windows\ $Architecture "
2016-02-02 10:04:50 -08:00
}
if ( ! ( Test-Path $env:DOTNET_INSTALL_DIR ) )
{
mkdir $env:DOTNET_INSTALL_DIR | Out-Null
}
# Install a stage 0
2016-05-11 17:20:40 -07:00
Write-Host " Installing .NET Core CLI Stage 0 from branchinfo channel "
& " $RepoRoot \scripts\obtain\dotnet-install.ps1 " -Channel $env:CHANNEL -Architecture $Architecture -Verbose
if ( $LASTEXITCODE -ne 0 ) { throw " Failed to install stage0 " }
2016-02-02 10:04:50 -08:00
# Put the stage0 on the path
2016-03-21 12:40:52 -07:00
$env:PATH = " $env:DOTNET_INSTALL_DIR ; $env:PATH "
2016-02-02 10:04:50 -08:00
# Restore the build scripts
Write-Host " Restoring Build Script projects... "
2016-05-11 17:20:40 -07:00
pushd " $PSScriptRoot \.. "
2016-04-04 09:11:15 -07:00
dotnet restore - -infer -runtimes
2016-02-02 10:04:50 -08:00
if ( $LASTEXITCODE -ne 0 ) { throw " Failed to restore " }
popd
# Publish the builder
Write-Host " Compiling Build Scripts... "
2016-05-11 17:20:40 -07:00
dotnet publish " $PSScriptRoot " -o " $PSScriptRoot \bin " - -framework netcoreapp1 . 0
2016-02-02 10:04:50 -08:00
if ( $LASTEXITCODE -ne 0 ) { throw " Failed to compile build scripts " }
# Run the builder
Write-Host " Invoking Build Scripts... "
2016-02-16 12:04:13 -08:00
Write-Host " Configuration: $env:CONFIGURATION "
2016-05-11 17:20:40 -07:00
& " $PSScriptRoot \bin\dotnet-cli-build.exe " @Targets
2016-02-02 10:04:50 -08:00
if ( $LASTEXITCODE -ne 0 ) { throw " Build failed " }