Repository navigation
electron-builder@27.0.0-alpha.12
Pre-releaseMajor Changes
-
Feat!: add
fileOptions.excludedExts(root and per platform, a list or a single string such as-c.fileOptions.excludedExts=default) to configure the file extensions excluded from the app files and the copiednode_modules—"default"is the built-in list, which now includespdb, any other entry adds an extension, and"!ext"removes one (a list of removals only, such as["!pdb"], is rejected: write["default", "!pdb"]; an invalid list fails the build when the configuration is validated, at the root and in every platform section); a later layer's list replaces an earlier one instead of being merged with it (extendschild, programmatic or-cconfiguration, platform section,mas/masDev); afilespattern that names an excluded extension (e.g.native/addon.pdb) re-includes only the files it matches. BREAKING: removed theincludePdboption —electron-builder migrate-schemarewritesincludePdb: trueto"fileOptions": { "excludedExts": ["default", "!pdb"] }andincludePdb: falseto"fileOptions": { "excludedExts": ["default"] }.#103390b508ab—electron-builder,app-builder-lib,builder-util -
Feat(s3)!: explicit AWS credential sources for S3 publishing via the new
awsCredentialsoption (restores shared config / IAM Identity Center profiles, #10054)#1025746be1f4—app-builder-lib,builder-util-runtime,electron-publishawsCredentials.sourceis required to publish (no default, no implicit credentials).awsCredentials.source: "env"reads onlyAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_SESSION_TOKEN, or the variable names given inawsCredentials.env.awsCredentials.source: "profile"withprofile(plus optionalcredentialsFile/configFile) reads a named profile from the shared config and credentials files: static keys, IAM Identity Center (SSO),credential_processand assume-role. The AWS SDK providers are loaded lazily, only for non-static profiles, and are given explicit paths. Assume-role hops use an explicitly configured STS client (named profile's region, no configured endpoint URLs).credential_sourceand web identity (web_identity_token_file) are rejected anywhere in the chain, before the SDK is loaded.awsCredentials.source: "sso-role-chain"withprofileresolves an assume-role profile whosesource_profilechain (up to 5 hops, no cycles) starts at an IAM Identity Center (SSO) profile: the SSO profile is resolved from the configured files, then STS AssumeRole is called per hop with explicit region, endpoint and credentials (neverAWS_REGION,AWS_PROFILEorAWS_ENDPOINT_URL*).credential_source,mfa_serial, web identity andcredential_processare rejected in the chain.source: "profile"keeps rejecting SSO-sourced role chains and points to this source.- Resolved credentials are reused for every file of a publish instead of being resolved again per upload.
BREAKING CHANGE: S3 publishing fails with an InvalidConfigurationError unless
awsCredentials.sourceis set (add{ "source": "env" }to keep usingAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY).AWS_PROFILE,AWS_SDK_LOAD_CONFIG,AWS_CONFIG_FILE,AWS_SHARED_CREDENTIALS_FILEand an implicit~/.aws/credentialsare no longer read. Missing credentials now fail with a clear error instead of an unsigned or env-fallback signature. For dotted bucket names withoutregion, the region is looked up only when publishing.awsCredentialsis never written toapp-update.yml. -
Feat(signing)!: fail the build when the signing key isn't in
updateManifest.publicKey#103506e3153b—electron-builder,app-builder-libBREAKING CHANGE: when
updateManifest.publicKeyis set explicitly and none of the keys the build signs update
manifests with is in it, a publishing build now fails at build start, before anything is packed or uploaded, with an
InvalidConfigurationErrornaming the key ids of the signing keys and of the listed keys (never key material). Such
a release embeds no key it is signed with, so its installs would reject manifests signed with the current key(s).
This was a warning before; a build without a publish policy still only warns. For a deliberate cutover release that
is signed with the old key but embeds only the new one, set the newupdateManifest.allowSigningKeyOutsideTrustList: true(explicit config only) to keep the warning. Nothing changes whenpublicKeyis not set, since the trust list is
then derived from the signing keys. See the v27 breaking changes guide. -
Feat(signing)!:
ELECTRON_BUILDER_UPDATE_SIGN_KEYtakes the PEM file base64-encoded on one line, so CI systems such as GitLab can mask it (#10344) — encode it withbase64 < update-private-key.pem | tr -d '\n', and for key rotation concatenate the PEM files and encode them once (cat old.pem new.pem | base64 | tr -d '\n'). BREAKING for the 27.0.0 alphas: a raw PEM, or any value that is not the standard base64 of complete PEM private keys (quoted, URL-safe, truncated, separately encoded keys joined together), now fails with anInvalidConfigurationErrorthat never prints the value, and invalid or duplicate signing keys from any source are reported as anInvalidConfigurationErrortoo;ELECTRON_BUILDER_UPDATE_SIGN_KEY_FILEandupdateManifest.signingKey/signingKeyFilestill take PEM, andelectron-builder create-update-keyprints the encode command for the key file it writes.#10347f8a6719—electron-builder,app-builder-lib,builder-util
Minor Changes
- Fix(forge): make the electron-forge-maker-* packages loadable by Electron Forge 6+ (
MakerBase-compatible default export class, also exported by name, with the makerconfigapplied as the target's options); calling the default export as an Electron Forge 5 maker function still works#103511e32919—app-builder-lib,electron-forge-maker-appimage,electron-forge-maker-nsis,electron-forge-maker-nsis-web,electron-forge-maker-snap - Feat(mac):
APPLE_API_KEYalso accepts the App Store Connect API key's.p8contents base64-encoded on one line, so masked CI variables can hold it (#10344) — electron-builder writes it to a new0600temporary file for each notarization and deletes it once notarytool is done; a path keeps working unchanged, and key text (PEM) or a damaged base64 value now fails before notarization with anInvalidConfigurationErrorthat does not print the key. The notarization guide documented base64 content before it was supported.#10347f8a6719—app-builder-lib - Feat(mac): embed the Electron 41+ ASAR integrity digest into the Electron Framework (signed again ad hoc afterwards), so with the
enableEmbeddedAsarIntegrityValidationfuse theElectronAsarIntegrityhashes inInfo.plistcan't be changed to match a modifiedapp.asar; on by default,mac.asarIntegrityDigest: falseopts out (#9648)#103464cd8a92—app-builder-lib - Feat(mac): add a
pkgDistributionCreatedhook (#10355), mirroringappxManifestCreatedandmsiProjectCreated. It is called with the path to the PKG target'sdistribution.xmlafter electron-builder has written it and beforeproductbuildbuilds the installer from it, so the distribution (for example, its<title>) can be edited in place or replaced.#1040209dae73—app-builder-lib
Patch Changes
- Fix: deduplicate publish tasks by value
#1013448c0645 - Fix: enforce the configured API redirect limit without an extra hop
#101218b71ed8—builder-util-runtime - Fix(publish): detect aborted S3 responses via
closeinstead of the deprecatedabortedevent, and report non-http(s) or unparseable S3 endpoints as configuration errors#103499e0137e—electron-publish - Fix(signing): a base64
CSC_LINK/WIN_CSC_LINK/CSC_INSTALLER_LINK/SNAP_CSC_LINK/cscLinkvalue must be valid standard base64 (line breaks are ignored; encode it withbase64 -w0oropenssl base64 -A) — a value with surrounding quotes, URL-safe characters or other stray characters fails with anInvalidConfigurationErrorthat does not print the value; adds the strictdecodeStrictBase64helper to builder-util.#10347f8a6719—app-builder-lib,builder-util - Fix: cancel GitHub upload retry delays
#101383910c94—electron-publish - Fix: only replace terminal platform icon extensions
#1012908d4a10—builder-util - Fix: cancel original async tasks in AsyncTaskManager
#10133b1460cc—builder-util - Fix(mac): keep an explicit
NSAllowsArbitraryLoadsfrommac.extendInfo. Before, electron-builder always setNSAppTransportSecurity.NSAllowsArbitraryLoadstotrueon non-MAS builds, afterextendInfowas merged, so an app could not turn it off. After, it is set totrueonly when the app has not set it; the local-networking andlocalhost/127.0.0.1exceptions that electron-updater's proxy needs are still added.#10353f1e4a45—app-builder-lib - Fix(nsis): pin the LZMA2 block size of differential-aware packages so their bytes no longer depend on the build host's thread count. On hosts with fewer than 4 threads (such as 2-CPU GitHub runners), 7-Zip wrote one solid stream, so most of the package changed every release and differential updates downloaded nearly the whole package. Output on 4+ thread hosts is unchanged.
#10335f0833ea—app-builder-lib - Fix(win): with
win.sign: falseornull, no certificate is read fromCSC_LINK/WIN_CSC_LINK, and app-update.yml carries no derivedpublisherName#1037638fba92—app-builder-lib - Refactor(win): export the Windows Authenticode helpers electron-updater verifies update signatures with (
preparePowerShellExec,escapePowerShellSingleQuotes,parseAuthenticodeSignatureOutput,matchPublisherName), moved unchanged from electron-updater so electron-builder can check signed installers with the same code#1037860e3708—builder-util-runtime - Fix(win): fail the build when the signed NSIS installer (or nsis-web stub) is not signed by a certificate matching the publisherName that electron-updater verifies updates against
#1037860e3708—app-builder-lib - Fix(deps): bump the @aws-sdk credential providers to drop the vulnerable fast-xml-parser 5.2.5, and reject
aws login(login_session) profiles forawsCredentials.source: "profile"#10394e021179—electron-publish - Fix(win): sign
.msiwith SHA-256 by default. An MSI holds a single signature, and electron-builder picked SHA-1 for it unlesssigningHashAlgorithmsexplicitly left SHA-1 out, so the default configuration (["sha1", "sha256"]) produced SHA-1-only signed MSIs. Now an MSI is signed with SHA-256 unless SHA-1 is the only algorithm listed. To keep the previous behaviour, setsigningHashAlgorithms: ["sha1"]. Executables are still dual-signed by default. Because an MSI now takes the SHA-256 path, signtool timestamps it via RFC 3161 (/tr rfc3161TimeStampServer /td sha256) instead of the legacy/t timeStampServer, and a customwin.signhook now receiveshash: "sha256"for.msifiles. Signing with an emptysigningHashAlgorithmslist now fails with anInvalidConfigurationErrorinstead of running no signing pass and reporting the file as signed.#103740bef576—app-builder-lib - Fix(nsis): pressing Tab while a one-click installer shows its progress banner no longer makes the installer stop responding; keyboard focus now moves from the hidden install page to the banner's status text, which screen readers also announce
#10396cf3f5db—app-builder-lib - Fix: preserve complete XML text and reject incomplete documents
#1012545d3bc4—builder-util-runtime - Fix: report finite transfer rates for immediate downloads
#10122370d18c—builder-util-runtime - Fix(win): rename Electron's
electron_wer.dllWindows Error Reporting helper together with the executable for Electron 45 and later, so fail-fast crashes are captured in packaged apps#10398e9c5ae6—app-builder-lib - Fix(win): update the default
winCodeSigntoolset to1.3.1. The bundled macOSosslsigncodenow ships its own OpenSSL, so signing Windows artifacts on macOS no longer needs Homebrew'sopenssl@3(and no longer fails withSymbol not found: _OPENSSL_sk_set_thunkswhen Homebrew's version doesn't match), and PKCS#11 signing works without installing libp11 or settingOPENSSL_MODULES#104145d84f91—app-builder-lib
Full Changelog: https://github.com/electron-userland/electron-builder/compare/electron-builder@27.0.0-alpha.11...electron-builder@27.0.0-alpha.12