Files
PowerShell-PSReadLine/build.ps1
T
Dongbo Wang 49604e89ec Update PSReadLine build to target netstandard2.0 (#4584)
By retargeting PSReadLine to `netstandard2.0`, we can simplify the build a lot and produce the same assembly no matter building on Windows or non-Windows.

- Update PSReadLine build to target `netstandard2.0`, including the CI and release pipeline YAML files.
- Update the test to target `net472` and `net6.0`, so that we can run tests with both .NET Framework and .NET
- Rename `Microsoft.PowerShell.PSReadLine2.dll` to `Microsoft.PowerShell.PSReadLine.dll`
- Update and clean up the `README.md` with the up-to-date information
2025-02-28 11:09:08 -08:00

100 lines
2.9 KiB
PowerShell

#Requires -Version 7.4
<#
.SYNOPSIS
A script that provides simple entry points for bootstrapping, building and testing.
.DESCRIPTION
A script to make it easy to bootstrap, build and run tests.
.EXAMPLE
PS > .\build.ps1 -Bootstrap
Check and install prerequisites for the build.
.EXAMPLE
PS > .\build.ps1 -Configuration Release
Build the main module with 'Release' configuration targeting 'netstandard2.0'.
.EXAMPLE
PS > .\build.ps1
Build the main module with the default configuration (Debug) targeting 'netstandard2.0'.
.EXAMPLE
PS > .\build.ps1 -Test
Run xUnit tests with the default configuration (Debug) and the default target framework (net472 on Windows or net6.0 otherwise).
.PARAMETER Clean
Clean the local repo, but keep untracked files.
.PARAMETER Bootstrap
Check and install the build prerequisites.
.PARAMETER Test
Run tests.
.PARAMETER Configuration
The configuration setting for the build. The default value is 'Debug'.
.PARAMETER Framework
The target framework when testing:
- net472: run tests with .NET Framework
- net6.0: run tests with .NET 6.0
When not specified, the target framework is determined by the current OS platform:
- use 'net472' on Windows
- use 'net6.0' on Unix platforms
#>
[CmdletBinding(DefaultParameterSetName = 'default')]
param(
[Parameter(ParameterSetName = 'cleanup')]
[switch] $Clean,
[Parameter(ParameterSetName = 'bootstrap')]
[switch] $Bootstrap,
[Parameter(ParameterSetName = 'test')]
[switch] $Test,
[Parameter(ParameterSetName = 'test')]
[switch] $CheckHelpContent,
[Parameter(ParameterSetName = 'test')]
[ValidateSet("net472", "net6.0")]
[string] $Framework,
[Parameter(ParameterSetName = 'default')]
[Parameter(ParameterSetName = 'test')]
[ValidateSet("Debug", "Release")]
[string] $Configuration = "Debug"
)
# Clean step
if ($Clean) {
try {
Push-Location $PSScriptRoot
git clean -fdX
} finally {
Pop-Location
}
return
}
Import-Module "$PSScriptRoot/tools/helper.psm1"
if ($Bootstrap) {
Write-Log "Validate and install missing prerequisites for building ..."
Install-Dotnet
if (-not (Get-Module -Name InvokeBuild -ListAvailable)) {
Write-Log -Warning "Module 'InvokeBuild' is missing. Installing 'InvokeBuild' ..."
Install-Module -Name InvokeBuild -Scope CurrentUser -Force
}
return
}
# Common step required by both build and test
Find-Dotnet
if (-not (Get-Module -Name InvokeBuild -ListAvailable)) {
throw "Cannot find the 'InvokeBuild' module. Please specify '-Bootstrap' to install build dependencies."
}
# Build/Test step
$buildTask = if ($Test) { "RunTests" } else { "ZipRelease" }
$arguments = @{ Task = $buildTask; Configuration = $Configuration }
if ($Framework) { $arguments.Add("TestFramework", $Framework) }
if ($CheckHelpContent) { $arguments.Add("CheckHelpContent", $true) }
Invoke-Build @arguments