-
Notifications
You must be signed in to change notification settings - Fork 10.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
build.cmd/sh changes #5958
Merged
Merged
build.cmd/sh changes #5958
Changes from 10 commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
843c2c7
build.cmd/sh changes: Update the build scripts to support building su…
5f4f2d1
Merge branch 'master' into build-script
d8d8909
fixup! build.cmd/sh changes: Update the build scripts to support buil…
e3b198c
Workaround aspnet/Extensions#815
8b03dc6
Merge branch 'master' into build-script
d429166
Fix --test in build.sh
cc6906f
Fix bash scripts
f8de574
Merge branch 'master' into build-script
9fa0eb7
Merge branch 'master' into build-script
494050a
Update to extensions 3.0.0-preview.18619.1
700f42b
Merge branch 'master' into build-script
b59b553
add details about /t:resx
c812b93
fix --no-build and --no-restore
7be322a
Merge branch 'master' into build-script
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
@ECHO OFF | ||
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' default-build %*; exit $LASTEXITCODE" | ||
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0build.ps1' %*; exit $LASTEXITCODE" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,264 @@ | ||
#requires -version 4 | ||
|
||
<# | ||
.SYNOPSIS | ||
Builds this repository. | ||
|
||
.DESCRIPTION | ||
This build script installs required tools and runs an MSBuild command on this repository. | ||
This script can be used to invoke various targets, such as targets to produce packages, | ||
build projects, run tests, and generate code. | ||
|
||
.PARAMETER RepoPath | ||
The folder to build. Defaults to the folder containing this script. This will be removed soon. | ||
|
||
.PARAMETER CI | ||
Sets up CI specific settings and variables. | ||
|
||
.PARAMETER Restore | ||
Run restore on projects. | ||
|
||
.PARAMETER Build | ||
Compile projects. | ||
|
||
.PARAMETER Pack | ||
Produce packages. | ||
|
||
.PARAMETER Test | ||
Run tests. | ||
|
||
.PARAMETER Sign | ||
Run code signing. | ||
|
||
.PARAMETER Projects | ||
A list of projects to build. (Must be an absolute path.) Globbing patterns are supported, such as "$(pwd)/**/*.csproj" | ||
|
||
.PARAMETER All | ||
Build all project types. | ||
|
||
.PARAMETER Managed | ||
Build managed projects (C#, F#, VB). | ||
|
||
.PARAMETER Native | ||
Build native projects (C++). | ||
|
||
.PARAMETER NodeJS | ||
Build NodeJS projects (TypeScript, JS). | ||
|
||
.PARAMETER MSBuildArguments | ||
Additional MSBuild arguments to be passed through. | ||
|
||
.EXAMPLE | ||
Building both native and managed projects. | ||
|
||
build.ps1 -managed -native | ||
|
||
.EXAMPLE | ||
Building a subfolder of code. | ||
|
||
build.ps1 "$(pwd)/src/SomeFolder/**/*.csproj" | ||
|
||
.EXAMPLE | ||
Running tests. | ||
|
||
build.ps1 -test | ||
|
||
.LINK | ||
Online version: https://github.com/aspnet/AspNetCore/blob/master/docs/BuildFromSource.md | ||
#> | ||
[CmdletBinding(PositionalBinding = $false, DefaultParameterSetName='Groups')] | ||
param( | ||
# Bootstrapper options | ||
[Obsolete('This parameter will be removed when we finish https://github.com/aspnet/AspNetCore/issues/4246')] | ||
[string]$RepoRoot = $PSScriptRoot, | ||
|
||
[switch]$CI, | ||
|
||
# Build lifecycle options | ||
[switch]$Restore = $True, # Run tests | ||
[switch]$Build = $True, # Compile | ||
[switch]$Pack, # Produce packages | ||
[switch]$Test, # Run tests | ||
[switch]$Sign, # Code sign | ||
|
||
# Project selection | ||
[Parameter(ParameterSetName = 'All')] | ||
[switch]$All, # Build everything | ||
|
||
# A list of projects which should be built. | ||
[Parameter(ParameterSetName = 'Projects')] | ||
[string]$Projects, | ||
|
||
# Build a specified set of project groups | ||
[Parameter(ParameterSetName = 'Groups')] | ||
[switch]$Managed, | ||
[Parameter(ParameterSetName = 'Groups')] | ||
[switch]$Native, | ||
[Parameter(ParameterSetName = 'Groups')] | ||
[switch]$NodeJS, | ||
|
||
# Other lifecycle targets | ||
[switch]$Help, # Show help | ||
|
||
# Capture the rest | ||
[Parameter(ValueFromRemainingArguments = $true)] | ||
[string[]]$MSBuildArguments | ||
) | ||
|
||
Set-StrictMode -Version 2 | ||
$ErrorActionPreference = 'Stop' | ||
|
||
# | ||
# Functions | ||
# | ||
|
||
function Get-KoreBuild { | ||
|
||
if (!(Test-Path $LockFile)) { | ||
Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $LockFile | ||
} | ||
|
||
$version = Get-Content $LockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1 | ||
if (!$version) { | ||
Write-Error "Failed to parse version from $LockFile. Expected a line that begins with 'version:'" | ||
} | ||
$version = $version.TrimStart('version:').Trim() | ||
$korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version) | ||
|
||
if (!(Test-Path $korebuildPath)) { | ||
Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version" | ||
New-Item -ItemType Directory -Path $korebuildPath | Out-Null | ||
$remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip" | ||
|
||
try { | ||
$tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip" | ||
Get-RemoteFile $remotePath $tmpfile | ||
if (Get-Command -Name 'Expand-Archive' -ErrorAction Ignore) { | ||
# Use built-in commands where possible as they are cross-plat compatible | ||
Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath | ||
} | ||
else { | ||
# Fallback to old approach for old installations of PowerShell | ||
Add-Type -AssemblyName System.IO.Compression.FileSystem | ||
[System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath) | ||
} | ||
} | ||
catch { | ||
Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore | ||
throw | ||
} | ||
finally { | ||
Remove-Item $tmpfile -ErrorAction Ignore | ||
} | ||
} | ||
|
||
return $korebuildPath | ||
} | ||
|
||
function Join-Paths([string]$path, [string[]]$childPaths) { | ||
$childPaths | ForEach-Object { $path = Join-Path $path $_ } | ||
return $path | ||
} | ||
|
||
function Get-RemoteFile([string]$RemotePath, [string]$LocalPath) { | ||
if ($RemotePath -notlike 'http*') { | ||
Copy-Item $RemotePath $LocalPath | ||
return | ||
} | ||
|
||
$retries = 10 | ||
while ($retries -gt 0) { | ||
$retries -= 1 | ||
try { | ||
Invoke-WebRequest -UseBasicParsing -Uri $RemotePath -OutFile $LocalPath | ||
return | ||
} | ||
catch { | ||
Write-Verbose "Request failed. $retries retries remaining" | ||
} | ||
} | ||
|
||
Write-Error "Download failed: '$RemotePath'." | ||
} | ||
|
||
# | ||
# Main | ||
# | ||
|
||
# Load configuration or set defaults | ||
|
||
if ($Help) { | ||
Get-Help $PSCommandPath | ||
exit 1 | ||
} | ||
|
||
$RepoRoot = Resolve-Path $RepoRoot | ||
$Channel = 'master' | ||
$ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' | ||
$ConfigFile = Join-Path $PSScriptRoot 'korebuild.json' | ||
$LockFile = Join-Path $PSScriptRoot 'korebuild-lock.txt' | ||
|
||
if (Test-Path $ConfigFile) { | ||
try { | ||
$config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json | ||
if ($config) { | ||
if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel } | ||
if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource} | ||
} | ||
} catch { | ||
Write-Warning "$ConfigFile could not be read. Its settings will be ignored." | ||
Write-Warning $Error[0] | ||
} | ||
} | ||
|
||
$DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } ` | ||
elseif ($CI) { Join-Path $PSScriptRoot '.dotnet' } ` | ||
elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} ` | ||
elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}` | ||
else { Join-Path $PSScriptRoot '.dotnet'} | ||
|
||
$env:DOTNET_HOME = $DotNetHome | ||
|
||
# Execute | ||
|
||
$korebuildPath = Get-KoreBuild | ||
|
||
# Project selection | ||
if ($All) { | ||
$MSBuildArguments += '/p:BuildAllProjects=true' | ||
} | ||
elseif ($Projects) { | ||
$MSBuildArguments += "/p:Projects=$Projects" | ||
} | ||
else { | ||
# When adding new sub-group build flags, add them to this check | ||
if((-not $Native) -and (-not $Managed) -and (-not $NodeJS)) { | ||
Write-Warning "No default group of projects was specified, so building the 'managed' and 'native' subset of projects. Run ``build.cmd -help`` for more details." | ||
|
||
# This goal of this is to pick a sensible default for `build.cmd` with zero arguments. | ||
# We believe the most common thing our contributors will work on is C#, so if no other build group was picked, build the C# projects. | ||
|
||
$Managed = $true | ||
} | ||
|
||
$MSBuildArguments += "/p:BuildManaged=$Managed" | ||
$MSBuildArguments += "/p:BuildNative=$Native" | ||
$MSBuildArguments += "/p:BuildNodeJS=$NodeJS" | ||
} | ||
|
||
# Target selection | ||
$MSBuildArguments += "/p:_RunRestore=$Restore" | ||
$MSBuildArguments += "/p:_RunBuild=$Build" | ||
$MSBuildArguments += "/p:_RunPack=$Pack" | ||
$MSBuildArguments += "/p:_RunTests=$Test" | ||
$MSBuildArguments += "/p:_RunSign=$Sign" | ||
|
||
Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1') | ||
|
||
try { | ||
Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $RepoRoot -ConfigFile $ConfigFile -CI:$CI | ||
Invoke-KoreBuildCommand 'default-build' @MSBuildArguments | ||
} | ||
finally { | ||
Remove-Module 'KoreBuild' -ErrorAction Ignore | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure I understood whether this only runs tests, or does it also build some subset of things required to run tests? And if it literally only runs tests (i.e. it assumes all binaries are already built and in the right location), when would that be needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
build.cmd -test
will build AND test. We could add a gesture for just running tests without building, but I don't think re-running tests without changes is very common.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@halter73 does this all the time, re-running tests in a loop trying to repro flaky issues.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK I was thinking it presumably builds & runs tests.
The case of re-running tests in a loop happens, but is rare, so I didn't think that would be a frequently used case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if the build were incremental then it would work both ways...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Builds should be incremental once we finish #4246.
You can do it with the build.cmd script, it's just not the default. On *nix,
build.sh --no-restore --no-build --test
. On Windows, it's./build.ps1 -restore:$false -build:$false -test
. You can also usedotnet test --no-build
on the project you're trying to use.