Add Ability to generate Appx packages
1
.gitignore
vendored
@ -16,6 +16,7 @@ dotnet-install.ps1
|
|||||||
# Ignore executables
|
# Ignore executables
|
||||||
*.exe
|
*.exe
|
||||||
*.msi
|
*.msi
|
||||||
|
*.appx
|
||||||
|
|
||||||
# Ignore packages
|
# Ignore packages
|
||||||
*.deb
|
*.deb
|
||||||
|
BIN
Assets/Powershell_16.png
Normal file
After Width: | Height: | Size: 622 B |
BIN
Assets/Powershell_20.png
Normal file
After Width: | Height: | Size: 736 B |
BIN
Assets/Powershell_24.png
Normal file
After Width: | Height: | Size: 882 B |
BIN
Assets/Powershell_256.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
Assets/Powershell_32.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
Assets/Powershell_40.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
Assets/Powershell_48.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
Assets/Powershell_64.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
15
appveyor.yml
@ -66,7 +66,8 @@ on_finish:
|
|||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
try {
|
try {
|
||||||
# Build package
|
# Build package
|
||||||
$package = Start-PSPackage
|
$packages = Start-PSPackage
|
||||||
|
|
||||||
# Creating project artifact
|
# Creating project artifact
|
||||||
$name = git describe
|
$name = git describe
|
||||||
$zipFilePath = Join-Path $pwd "$name.zip"
|
$zipFilePath = Join-Path $pwd "$name.zip"
|
||||||
@ -75,10 +76,14 @@ on_finish:
|
|||||||
[System.IO.Compression.ZipFile]::CreateFromDirectory($env:CoreOutput, $zipFilePath)
|
[System.IO.Compression.ZipFile]::CreateFromDirectory($env:CoreOutput, $zipFilePath)
|
||||||
[System.IO.Compression.ZipFile]::CreateFromDirectory($env:FullOutput, $zipFileFullPath)
|
[System.IO.Compression.ZipFile]::CreateFromDirectory($env:FullOutput, $zipFileFullPath)
|
||||||
|
|
||||||
$artifacts = @(
|
$artifacts = New-Object System.Collections.ArrayList
|
||||||
$package,
|
foreach ($package in $packages) {
|
||||||
$zipFilePath,
|
$artifacts.Add($package)
|
||||||
$zipFileFullPath
|
}
|
||||||
|
|
||||||
|
$artifacts.Add($zipFilePath)
|
||||||
|
$artifacts.Add($zipFileFullPath)
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
Publish-NuGetFeed -OutputPath .\nuget-artifacts -VersionSuffix "b$($env:APPVEYOR_BUILD_NUMBER)"
|
Publish-NuGetFeed -OutputPath .\nuget-artifacts -VersionSuffix "b$($env:APPVEYOR_BUILD_NUMBER)"
|
||||||
|
113
build.psm1
@ -441,7 +441,12 @@ Built upon .NET Core, it is also a C# REPL.
|
|||||||
Write-Verbose "Packaging $Source"
|
Write-Verbose "Packaging $Source"
|
||||||
|
|
||||||
if ($IsWindows) {
|
if ($IsWindows) {
|
||||||
return Create-MSIPackage -ProductSourcePath $Source -ProductVersion $Version -Verbose
|
$msiPackagePath = Create-MSIPackage -ProductSourcePath $Source -ProductVersion $Version -Verbose
|
||||||
|
$appxPackagePath = New-AppxPackage -PackageVersion $Version -SourcePath $Source -AssetsPath "$PSScriptRoot\Assets" -Verbose
|
||||||
|
|
||||||
|
$packages = @($msiPackagePath, $appxPackagePath)
|
||||||
|
|
||||||
|
return $packages
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not (Get-Command "fpm" -ErrorAction SilentlyContinue)) {
|
if (-not (Get-Command "fpm" -ErrorAction SilentlyContinue)) {
|
||||||
@ -1021,3 +1026,109 @@ function Create-MSIPackage
|
|||||||
return $msiLocationPath
|
return $msiLocationPath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to create an Appx package compatible with Windows 8.1 and above
|
||||||
|
function New-AppxPackage
|
||||||
|
{
|
||||||
|
[CmdletBinding()]
|
||||||
|
param (
|
||||||
|
|
||||||
|
# Name of the Package
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string] $PackageName = 'OpenPowerShell',
|
||||||
|
|
||||||
|
# Version of the Package
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string] $PackageVersion,
|
||||||
|
|
||||||
|
# Source Path to the Binplaced Files
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string] $SourcePath,
|
||||||
|
|
||||||
|
# Path to Assets folder containing Appx specific artifacts
|
||||||
|
[Parameter(Mandatory = $true)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string] $AssetsPath
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Verbose "Extract the version in the form of a.b.c.d"
|
||||||
|
$PackageVersion = ([regex]::matches($PackageVersion, "\d+(\.\d+)+"))[0].value
|
||||||
|
Write-Verbose "Package Version is $PackageVersion"
|
||||||
|
|
||||||
|
$win10sdkBinPath = "${env:ProgramFiles(x86)}\Windows Kits\10\bin\x64"
|
||||||
|
|
||||||
|
Write-Verbose "Ensure Win10 SDK is present on the machine @ $win10sdkBinPath"
|
||||||
|
if (-not (Test-Path $win10sdkBinPath))
|
||||||
|
{
|
||||||
|
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 Assets Path is valid - $AssetsPath"
|
||||||
|
if (-not (Test-Path $AssetsPath))
|
||||||
|
{
|
||||||
|
throw "Invalid AssetsPath - $AssetsPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Verbose "Initialize MakeAppx executable path"
|
||||||
|
$makeappxExePath = Join-Path $win10sdkBinPath "MakeAppx.exe"
|
||||||
|
|
||||||
|
$appxManifest = @"
|
||||||
|
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
|
||||||
|
<Identity Name="Microsoft.OpenPowerShell" ProcessorArchitecture="x64" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="#VERSION#" />
|
||||||
|
<Properties>
|
||||||
|
<DisplayName>OpenPowerShell</DisplayName>
|
||||||
|
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
|
||||||
|
<Logo>#LOGO#</Logo>
|
||||||
|
</Properties>
|
||||||
|
<Resources>
|
||||||
|
<Resource Language="en-us" />
|
||||||
|
</Resources>
|
||||||
|
<Dependencies>
|
||||||
|
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14257.0" MaxVersionTested="12.0.0.0" />
|
||||||
|
<TargetDeviceFamily Name="Windows.Server" MinVersion="10.0.14257.0" MaxVersionTested="12.0.0.0" />
|
||||||
|
</Dependencies>
|
||||||
|
<Capabilities>
|
||||||
|
<rescap:Capability Name="runFullTrust" />
|
||||||
|
</Capabilities>
|
||||||
|
<Applications>
|
||||||
|
<Application Id="OpenPowerShell" Executable="powershell.exe" EntryPoint="Windows.FullTrustApplication">
|
||||||
|
<uap:VisualElements DisplayName="OpenPowerShell" Description="OpenPowerShell Package" BackgroundColor="transparent" Square150x150Logo="#SQUARE150x150LOGO#" Square44x44Logo="#SQUARE44x44LOGO#">
|
||||||
|
</uap:VisualElements>
|
||||||
|
</Application>
|
||||||
|
</Applications>
|
||||||
|
</Package>
|
||||||
|
"@
|
||||||
|
|
||||||
|
$appxManifest = $appxManifest.Replace('#VERSION#', $PackageVersion)
|
||||||
|
$appxManifest = $appxManifest.Replace('#LOGO#', 'Assets\Powershell_256.png')
|
||||||
|
$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
|
||||||
|
|
||||||
|
$assetsInSourcePath = "$SourcePath" + '\Assets'
|
||||||
|
New-Item $assetsInSourcePath -type directory -Force | Out-Null
|
||||||
|
|
||||||
|
$assetsInSourcePath = Join-Path $SourcePath 'Assets'
|
||||||
|
|
||||||
|
Write-Verbose "Place AppxManifest dependencies such as images to $assetsInSourcePath"
|
||||||
|
Copy-Item "$AssetsPath\*.png" $assetsInSourcePath -Force
|
||||||
|
|
||||||
|
$appxPackagePath = "$pwd\$PackageName_$PackageVersion.appx"
|
||||||
|
Write-Verbose "Calling MakeAppx from $makeappxExePath to create the package @ $appxPackagePath"
|
||||||
|
& $makeappxExePath pack /o /v /d $SourcePath /p $appxPackagePath | 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
|
||||||
|
|
||||||
|
return $appxPackagePath
|
||||||
|
}
|
||||||
|