Emerald Windows packaged publish now targets signed MSIX output.
- MSIX signing proves package integrity and signer identity.
- The package manifest
Publishervalue must match the signing certificateSubjectexactly. - The private key (
.pfx) is sensitive and must never be committed to source control.
From the repository root on Windows:
$certPassword = Read-Host -AsSecureString "PFX password"
pwsh ./scripts/windows/publish-windows-msix.ps1 `
-CertificatePath "PATH\to\EmeraldSigning.pfx" `
-CertificatePassword $certPasswordOutput files:
artifacts/windows/final/Emerald-Windows-Signed-x64-arm64.appxbundleartifacts/windows/final/Emerald-Windows-Signing.cerartifacts/windows/final/Emerald-Windows-Signed-x64-arm64.zipwhen archive creation is enabled
For sideload install on Windows, import the public cert first. CI artifacts and draft releases now include the exported .cer alongside the Windows package:
Import-Certificate -FilePath "C:\secrets\EmeraldSigning.cer" -CertStoreLocation "Cert:\LocalMachine\TrustedPeople"Then install the .msixbundle.
If CI fails with certificate import/signing errors:
- Ensure the PFX actually contains a private key.
- Ensure certificate
Subjectexactly matches manifest publisher (CN=Riverside Valley). - Ensure certificate includes Code Signing EKU (
1.3.6.1.5.5.7.3.3). - Recreate GitHub secrets after exporting a fresh PFX:
WINDOWS_SIGNING_CERT_BASE64WINDOWS_SIGNING_CERT_PASSWORD
mspdbcmf.exe warning during packaging is non-blocking and does not cause signing failure.
In CI, verification now trusts the imported cert in the current user root store temporarily, then removes it during cleanup.
To reduce CI runtime, workflow packaging runs with -SkipBundleVerify and relies on signing command success.