Adding windows server names to the windows packages + Misc formatting fixes (#2757)

* Adding windows server names to the windows packages + Misc formatting fix

Misc fixes are:
- Added Get-PackageSemanticVersion function
- Added New-ZipPackage function to separate the Zip packaging code
- Removed ending ';' in hashtable syntax since entries are on new lines
- Standardized the variable name from $Source to $PackageSourcePath for
various packaging functions
- Removed 'return' in the function end to output the variable value
- Added -verbose to Write-Verbose to show the paths of various packages

* update

* Adding windows server names to the windows packages + Misc formatting fix

Misc fixes are:
- Added Get-PackageSemanticVersion function
- Added New-ZipPackage function to separate the Zip packaging code
- Removed ending ';' in hashtable syntax since entries are on new lines
- Standardized the variable name from $Source to $PackageSourcePath for
various packaging functions
- Removed 'return' in the function end to output the variable value
- Added -verbose to Write-Verbose to show the paths of various packages

* update

* Addressing review feedback

* Removed the $PackageVersion variable per review feedback

* Error message fix
This commit is contained in:
Hemant Mahawar authored and Mike Richmond committed 2016-12-14 09:28:38 -08:00
1 parent 8bfba04f1e
commit e26c2a8752
1 file changed
+132 -40
+132 -40
View File
@@ -1261,18 +1261,23 @@ function Start-PSPackage {
# Build the name suffix for win-plat packages
if ($IsWindows) {
$VersionTokens = $Version -split "-"
if ($VersionTokens.Count -gt 1) {
# Get the suffix like 'alpha.10-win81-x64'
$NameSuffix = $VersionTokens[1], $Runtime -join "-"
# Add the server name to the $RunTime. $runtime produced by dotnet is same for client or server
switch ($Runtime) {
'win81-x64' {$NameSuffix = 'win81-win2k12r2-x64'}
'win10-x64' {$NameSuffix = 'win10-win2k16-x64'}
'win7-x64' {$NameSuffix = 'win7-win2k8r2-x64'}
Default {$NameSuffix = $Runtime}
}
}
switch ($Type) {
"zip" {
$zipPackagePath = Join-Path $PWD "$Name-$Version-$Runtime.zip"
Compress-Archive -Path $Source\* -DestinationPath $zipPackagePath
Write-Output $zipPackagePath
$Arguments = @{
PackageNameSuffix = $NameSuffix
PackageSourcePath = $Source
PackageVersion = $Version
}
New-ZipPackage @Arguments
}
"msi" {
$TargetArchitecture = "x64"
@@ -1282,11 +1287,11 @@ function Start-PSPackage {
}
$Arguments = @{
ProductNameSuffix = $NameSuffix;
ProductSourcePath = $Source;
ProductVersion = $Version;
AssetsPath = "$PSScriptRoot\assets";
LicenseFilePath = "$PSScriptRoot\assets\license.rtf";
ProductNameSuffix = $NameSuffix
ProductSourcePath = $Source
ProductVersion = $Version
AssetsPath = "$PSScriptRoot\assets"
LicenseFilePath = "$PSScriptRoot\assets\license.rtf"
# Product Guid needs to be unique for every PowerShell version to allow SxS install
ProductGuid = [Guid]::NewGuid();
ProductTargetArchitecture = $TargetArchitecture;
@@ -1296,17 +1301,17 @@ function Start-PSPackage {
"appx" {
$Arguments = @{
PackageNameSuffix = $NameSuffix
PackageVersion = $Version;
SourcePath = $Source;
PackageSourcePath = $Source
PackageVersion = $Version
AssetsPath = "$PSScriptRoot\assets"
}
New-AppxPackage @Arguments
}
default {
$Arguments = @{
Type = $_;
Source = $Source;
Name = $Name;
Type = $_
PackageSourcePath = $Source
Name = $Name
Version = $Version
}
New-UnixPackage @Arguments
@@ -1316,13 +1321,14 @@ function Start-PSPackage {
function New-UnixPackage {
[CmdletBinding()]param(
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[ValidateSet("deb", "osxpkg", "rpm")]
[string]$Type,
[Parameter(Mandatory)]
[string]$Source,
[string]$PackageSourcePath,
# Must start with 'powershell' but may have any suffix
[Parameter(Mandatory)]
@@ -1383,7 +1389,7 @@ It consists of a cross-platform command-line shell and associated scripting lang
# Setup staging directory so we don't change the original source directory
$Staging = "$PSScriptRoot/staging"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue $Staging
Copy-Item -Recurse $Source $Staging
Copy-Item -Recurse $PackageSourcePath $Staging
# Rename files to given name if not "powershell"
if ($Name -ne "powershell") {
@@ -2223,6 +2229,35 @@ function script:Start-NativeExecution([scriptblock]$sb, [switch]$IgnoreExitcode)
}
}
# Builds coming out of this project can have version number as 'a.b.c-stringf.d-e-f' OR 'a.b.c.d-e-f'
# This function converts the above version into semantic version major.minor[.build-quality[.revision]] format
function Get-PackageSemanticVersion
{
[CmdletBinding()]
param (
# Version of the Package
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $Version
)
Write-Verbose "Extract the semantic version in the form of major.minor[.build-quality[.revision]] for $Version"
$packageVersionTokens = $Version.Split('.')
if (3 -eq $packageVersionTokens.Count) {
# In case the input is of the form a.b.c, add a '0' at the end for revision field
$packageSemanticVersion = $Version,'0' -join '.'
} elseif (3 -lt $packageVersionTokens.Count) {
# We have all the four fields
$packageRevisionTokens = ($packageVersionTokens[3].Split('-'))[0]
$packageSemanticVersion = $packageVersionTokens[0],$packageVersionTokens[1],$packageVersionTokens[2],$packageRevisionTokens -join '.'
} else {
throw "Cannot create Semantic Version from the string $Version containing 4 or more tokens"
}
$packageSemanticVersion
}
# Builds coming out of this project can have version number as 'a.b.c' OR 'a.b.c-d-f'
# This function converts the above version into major.minor[.build[.revision]] format
function Get-PackageVersionAsMajorMinorBuildRevision
@@ -2248,7 +2283,7 @@ function Get-PackageVersionAsMajorMinorBuildRevision
$packageVersion = $packageVersion + '.' + $packageBuildTokens
}
return $packageVersion
$packageVersion
}
function New-MSIPackage
@@ -2312,7 +2347,8 @@ function New-MSIPackage
$wixCandleExePath = Join-Path $wixToolsetBinPath "Candle.exe"
$wixLightExePath = Join-Path $wixToolsetBinPath "Light.exe"
$ProductVersion = Get-PackageVersionAsMajorMinorBuildRevision -Version $ProductVersion -Verbose
$ProductSemanticVersion = Get-PackageSemanticVersion -Version $ProductVersion
$ProductVersion = Get-PackageVersionAsMajorMinorBuildRevision -Version $ProductVersion
$assetsInSourcePath = Join-Path $ProductSourcePath 'assets'
New-Item $assetsInSourcePath -type directory -Force | Write-Verbose
@@ -2321,9 +2357,12 @@ function New-MSIPackage
Copy-Item "$AssetsPath\*.ico" $assetsInSourcePath -Force
$productVersionWithName = $ProductName + "_" + $ProductVersion
Write-Verbose "Create MSI for Product $productVersionWithName"
$productSemanticVersionWithName = $ProductName + "_" + $ProductSemanticVersion
Write-Verbose "Create MSI for Product $productSemanticVersionWithName"
[Environment]::SetEnvironmentVariable("ProductSourcePath", $ProductSourcePath, "Process")
# These variables are used by Product.wxs in assets directory
[Environment]::SetEnvironmentVariable("ProductName", $ProductName, "Process")
[Environment]::SetEnvironmentVariable("ProductGuid", $ProductGuid, "Process")
[Environment]::SetEnvironmentVariable("ProductVersion", $ProductVersion, "Process")
@@ -2340,7 +2379,7 @@ function New-MSIPackage
$wixObjProductPath = (Join-path $env:Temp "Product.wixobj")
$wixObjFragmentPath = (Join-path $env:Temp "Fragment.wixobj")
$packageName = $productVersionWithName
$packageName = $productSemanticVersionWithName
if ($ProductNameSuffix) {
$packageName += "-$ProductNameSuffix"
}
@@ -2353,8 +2392,8 @@ function New-MSIPackage
Remove-Item -ErrorAction SilentlyContinue *.wixpdb -Force
Write-Verbose "You can find the MSI @ $msiLocationPath"
return $msiLocationPath
Write-Verbose "You can find the MSI @ $msiLocationPath" -Verbose
$msiLocationPath
}
# Function to create an Appx package compatible with Windows 8.1 and above
@@ -2378,15 +2417,17 @@ function New-AppxPackage
# Source Path to the Binplaced Files
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $SourcePath,
[string] $PackageSourcePath,
# Path to Assets folder containing Appx specific artifacts
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $AssetsPath
)
$PackageSemanticVersion = Get-PackageSemanticVersion -Version $PackageVersion
$PackageVersion = Get-PackageVersionAsMajorMinorBuildRevision -Version $PackageVersion -Verbose
$PackageVersion = Get-PackageVersionAsMajorMinorBuildRevision -Version $PackageVersion
Write-Verbose "Package Version is $PackageVersion"
$win10sdkBinPath = Get-Win10SDKBinDir
@@ -2396,9 +2437,9 @@ function New-AppxPackage
throw "Install Win10 SDK prior to running this script - https://go.microsoft.com/fwlink/p/?LinkID=698771"
}
Write-Verbose "Ensure Source Path is valid - $SourcePath"
if (-not (Test-Path $SourcePath)) {
throw "Invalid SourcePath - $SourcePath"
Write-Verbose "Ensure Source Path is valid - $PackageSourcePath"
if (-not (Test-Path $PackageSourcePath)) {
throw "Invalid PackageSourcePath - $PackageSourcePath"
}
Write-Verbose "Ensure Assets Path is valid - $AssetsPath"
@@ -2441,28 +2482,79 @@ function New-AppxPackage
$appxManifest = $appxManifest.Replace('#SQUARE150x150LOGO#', 'Assets\Powershell_256.png')
$appxManifest = $appxManifest.Replace('#SQUARE44x44LOGO#', 'Assets\Powershell_48.png')
Write-Verbose "Place Appx Manifest in $SourcePath"
$appxManifest | Out-File "$SourcePath\AppxManifest.xml" -Force
Write-Verbose "Place Appx Manifest in $PackageSourcePath"
$appxManifest | Out-File "$PackageSourcePath\AppxManifest.xml" -Force
$assetsInSourcePath = Join-Path $SourcePath 'Assets'
$assetsInSourcePath = Join-Path $PackageSourcePath 'Assets'
New-Item $assetsInSourcePath -type directory -Force | Out-Null
Write-Verbose "Place AppxManifest dependencies such as images to $assetsInSourcePath"
Copy-Item "$AssetsPath\*.png" $assetsInSourcePath -Force
$appxPackageName = $PackageName + "_" + $PackageVersion
$appxPackageName = $PackageName + "_" + $PackageSemanticVersion
if ($PackageNameSuffix) {
$appxPackageName = $appxPackageName, $PackageNameSuffix -join "-"
}
$appxPackagePath = "$pwd\$appxPackageName.appx"
Write-Verbose "Calling MakeAppx from $makeappxExePath to create the package @ $appxPackagePath"
& $makeappxExePath pack /o /v /d $SourcePath /p $appxPackagePath | Write-Verbose
$appxLocationPath = "$pwd\$appxPackageName.appx"
Write-Verbose "Calling MakeAppx from $makeappxExePath to create the package @ $appxLocationPath"
& $makeappxExePath pack /o /v /d $PackageSourcePath /p $appxLocationPath | Write-Verbose
Write-Verbose "Clean-up Appx artifacts and Assets from $SourcePath"
Remove-Item $assetsInSourcePath -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$SourcePath\AppxManifest.xml" -Force -ErrorAction SilentlyContinue
Remove-Item "$PackageSourcePath\AppxManifest.xml" -Force -ErrorAction SilentlyContinue
return $appxPackagePath
Write-Verbose "You can find the APPX @ $appxLocationPath" -Verbose
$appxLocationPath
}
# Function to create a zip file for Nano Server and xcopy deployment
function New-ZipPackage
{
[CmdletBinding()]
param (
# Name of the Product
[ValidateNotNullOrEmpty()]
[string] $PackageName = 'PowerShell',
# Suffix of the Name
[string] $PackageNameSuffix,
# Version of the Product
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $PackageVersion,
# Source Path to the Product Files - required to package the contents into an Zip
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $PackageSourcePath
)
$ProductSemanticVersion = Get-PackageSemanticVersion -Version $PackageVersion
$zipPackageName = $PackageName + "_" + $ProductSemanticVersion
if ($PackageNameSuffix) {
$zipPackageName = $zipPackageName, $PackageNameSuffix -join "-"
}
Write-Verbose "Create Zip for Product $zipPackageName"
$zipLocationPath = Join-Path $PWD "$zipPackageName.zip"
If(Get-Command Compress-Archive -ErrorAction Ignore)
{
Compress-Archive -Path $PackageSourcePath\* -DestinationPath $zipLocationPath
Write-Verbose "You can find the Zip @ $zipLocationPath" -Verbose
$zipLocationPath
}
#TODO: Use .NET Api to do compresss-archive equivalent if the cmdlet is not present
else
{
Write-Error -Message "Compress-Archive cmdlet is missing in this PowerShell version"
}
}
function Start-CrossGen {