Patch Changes
-
Fix(updater): make GitHubProvider pick the highest eligible release for alpha/beta channel clients instead of the first feed entry, so a stable hotfix published after a pre-release no longer hides that newer pre-release (or offers a downgrade) (#10287)
#10289a1ad1a5 -
Fix: handle a deferred native macOS update download only once
#1011610c4b54 -
Fix: stop retry backoff immediately when cancelled
#1012668aa2ff—builder-util-runtime -
Fix: reject missing and path-valued cached update file names
#101154ca053b -
Fix: handle multipart headers split across download chunks
#10117dde668d -
Fix: validate the initial update channel and allow resetting a configured channel to the default
#101121e167b8 -
Fix(docs): repair broken links and anchors across the docs site and JSDoc, and export the
SnapOptions24,SnapOptionsLegacy,SnapOptionsCustomandRemoteBuildOptionstypes fromapp-builder-libso their API reference pages are generated#103052fdbcae—electron-updater,builder-util-runtime -
Feat(builder-util):
log.limit({ key, max, scope })/log.once(key, scope)emit a keyed message at most N times (per process, or per scope object), replacing hand-rolled "already warned" flags; electron-updater counts once-per-updater warnings internally without changing the injectableLoggerinterface. Both share one limiter (wrap()on any{ info, warn, error, debug? }logger, includingconsole), and itsLogLevel,LogLimitOptions,LoggerLikeandLimitedLoggertypes are now exported from builder-util-runtime (builder-util re-exports them)#103025cbbc8d—electron-updater,builder-util-runtime -
Refactor: once-only build and updater warnings use
log.once/log.limit(and the updater's per-instance counter) instead of hand-rolled flags and sets; a concurrently resolved NSIS ProgID notice can no longer print twice#103036fe881e -
Docs: document
files[].isAdminRightsRequiredas an intentionally unsigned launch hint in signed update manifests. It only selects how the hash-verified installer is launched (directly or viaelevate.exe), so publishers can correct it inlatest.ymlwithout re-signing.#10318434f6e9—electron-updater,builder-util-runtime -
Feat!: nest
files,extraResourcesandextraFilesunderfileOptions#103198f55928—builder-util-runtimeThe three file-copy lists live in a
fileOptions?: FilesBuildOptions | nullproperty at the configuration root and in every platform section (mac,mas,masDev,win,linux), the same waydirectoriesgroups the build directories:fileOptions.files,mac.fileOptions.extraResources, and so on.PlatformSpecificBuildOptionsdoes not extendFilesBuildOptions, and the TypeScript types and the JSON schema only havefileOptions.Flat
files/extraResources/extraFileskeys in a config file, anextendsparent, a-c.files=…override or theconfigobject passed tobuild()are applied as theirfileOptionscounterparts before the configuration is validated, logging one warning per process that names the keys found and where they belong. When a flat key and itsfileOptionscounterpart are set on the same object,fileOptionswins and the build warns about the conflict. A CLI override or a parent config's flat key is merged withfileOptions. AfileOptionsthat is not an object (for example a list of globs written directly under it) fails the build with a message showing the nested form.Code that reads
files,extraResourcesorextraFilesfrom the loaded configuration (for example a hook readingcontext.packager.config.files, orbuildResult.configuration.extraResources) gets thefileOptionsvalue, with a warning per key: the loaded configuration and its platform sections forward these reads through non-enumerable properties, which stay out of the effective config,JSON.stringifyandObject.keys. Assigning them throws a configuration error naming thefileOptionsproperty to set instead.deepAssign(builder-util-runtime) copies only enumerable own properties, so the forwarding properties are never copied into merged options.electron-builder migrate-schema(static and JS/TS configs) moves flat keys underfileOptionsat the root and per platform. A flat key also set underfileOptionsis removed with a warning, since the build ignores it.See https://www.electron.build/docs/migration/v27-breaking-changes#file-options-fileoptions