mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-22 09:18:18 +00:00
76 lines
2.5 KiB
PowerShell
76 lines
2.5 KiB
PowerShell
# Build a MSIX app package for Windows 10
|
|
|
|
Param(
|
|
[System.Security.Cryptography.X509Certificates.X509Certificate]
|
|
$Certificate,
|
|
[ValidateScript({Test-Path $_ -PathType Leaf})]
|
|
[String]
|
|
$CertificateFile,
|
|
[String]
|
|
$CertificatePassword,
|
|
[Int]
|
|
$BuildNumber
|
|
)
|
|
|
|
# Errors are handled explicitly. Otherwise any output to stderr when
|
|
# calling classic Windows exes causes a script error.
|
|
$ErrorActionPreference = 'Continue'
|
|
|
|
If (-Not $BuildNumber) {
|
|
$BuildNumber = 0
|
|
}
|
|
|
|
If (-Not $Certificate -And $CertificateFile) {
|
|
$CertPassword = ConvertTo-SecureString -String $CertificatePassword -Force -AsPlainText
|
|
$Certificate = Get-PfxCertificate -FilePath $CertificateFile -Password $CertPassword
|
|
}
|
|
|
|
$ScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
|
|
. $ScriptDirectory\win-common.ps1 -Certificate $Certificate
|
|
|
|
Write-Output "Building Windows 10 app package..."
|
|
|
|
# Build
|
|
Remove-Item -Path build,dist/picard,locale -Recurse -ErrorAction Ignore
|
|
python setup.py clean 2>&1 | %{ "$_" }
|
|
ThrowOnExeError "setup.py clean failed"
|
|
python setup.py build --build-number=$BuildNumber --disable-autoupdate 2>&1 | %{ "$_" }
|
|
ThrowOnExeError "setup.py build failed"
|
|
python setup.py build_ext -i 2>&1 | %{ "$_" }
|
|
ThrowOnExeError "setup.py build_ext -i failed"
|
|
|
|
# Package application
|
|
pyinstaller --noconfirm --clean picard.spec 2>&1 | %{ "$_" }
|
|
ThrowOnExeError "PyInstaller failed"
|
|
$PackageDir = (Resolve-Path dist\picard)
|
|
FinalizePackage $PackageDir
|
|
|
|
# Generate resource files
|
|
Copy-Item appxmanifest.xml $PackageDir
|
|
$PriConfigFile = (Join-Path (Resolve-Path .\build) priconfig.xml)
|
|
Push-Location $PackageDir
|
|
MakePri createconfig /ConfigXml $PriConfigFile /Default en-US /Overwrite
|
|
ThrowOnExeError "MakePri createconfig failed"
|
|
MakePri new /ProjectRoot $PackageDir /ConfigXml $PriConfigFile
|
|
ThrowOnExeError "MakePri new failed"
|
|
Pop-Location
|
|
|
|
# Generate msix package
|
|
$PicardVersion = (python -c "import picard; print(picard.__version__)")
|
|
If ($CertificateFile -or $Certificate) {
|
|
$PackageFile = "dist\MusicBrainz-Picard-$PicardVersion.msix"
|
|
} Else {
|
|
$PackageFile = "dist\MusicBrainz-Picard-$PicardVersion-unsigned.msix"
|
|
}
|
|
MakeAppx pack /o /h SHA256 /d $PackageDir /p $PackageFile
|
|
ThrowOnExeError "MakeAppx failed"
|
|
|
|
# Sign package
|
|
If ($CertificateFile) {
|
|
SignTool sign /fd SHA256 /f "$CertificateFile" /p "$CertificatePassword" $PackageFile
|
|
ThrowOnExeError "SignTool failed"
|
|
} ElseIf ($Certificate) {
|
|
SignTool sign /fd SHA256 /sha1 $Certificate.Thumbprint $PackageFile
|
|
ThrowOnExeError "SignTool failed"
|
|
}
|