From 4848e714aecf5807cb24685419ce1376001a501e Mon Sep 17 00:00:00 2001 From: Derek Johnson Date: Tue, 22 Jul 2025 16:20:36 -0400 Subject: [PATCH] fix(bundle): add serde default for all fields that impl Default (#4442) * fix(bundle): add serde default for all fields that impl Default - Adds #[serde(default)] for all fields of all bundle settings structs where the types impl Default - WindowsSettings: derive Default since all types impl Default Default values for more [bundle] settings #3785 * Add default for Nsis settings * Add default impl --------- Co-authored-by: Jonathan Kelley --- packages/cli/src/config/bundle.rs | 78 +++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/config/bundle.rs b/packages/cli/src/config/bundle.rs index 6c9c4ff88..071c0d6a6 100644 --- a/packages/cli/src/config/bundle.rs +++ b/packages/cli/src/config/bundle.rs @@ -4,18 +4,31 @@ use std::{collections::HashMap, str::FromStr}; #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub(crate) struct BundleConfig { + #[serde(default)] pub(crate) identifier: Option, + #[serde(default)] pub(crate) publisher: Option, + #[serde(default)] pub(crate) icon: Option>, + #[serde(default)] pub(crate) resources: Option>, + #[serde(default)] pub(crate) copyright: Option, + #[serde(default)] pub(crate) category: Option, + #[serde(default)] pub(crate) short_description: Option, + #[serde(default)] pub(crate) long_description: Option, + #[serde(default)] pub(crate) external_bin: Option>, + #[serde(default)] pub(crate) deb: Option, + #[serde(default)] pub(crate) macos: Option, + #[serde(default)] pub(crate) windows: Option, + #[serde(default)] pub(crate) android: Option, } @@ -23,15 +36,19 @@ pub(crate) struct BundleConfig { pub(crate) struct DebianSettings { // OS-specific settings: /// the list of debian dependencies. + #[serde(default)] pub depends: Option>, /// the list of recommended debian dependencies. #[serde(default)] pub recommends: Option>, /// the list of dependencies the package provides. + #[serde(default)] pub provides: Option>, /// the list of package conflicts. + #[serde(default)] pub conflicts: Option>, /// the list of package replaces. + #[serde(default)] pub replaces: Option>, /// List of custom files to add to the deb package. /// Maps the path on the debian package to the path of the file to include (relative to the current working directory). @@ -40,44 +57,66 @@ pub(crate) struct DebianSettings { /// Path to a custom desktop file Handlebars template. /// /// Available variables: `categories`, `comment` (optional), `exec`, `icon` and `name`. + #[serde(default)] pub desktop_template: Option, /// Define the section in Debian Control file. See : + #[serde(default)] pub section: Option, /// Change the priority of the Debian Package. By default, it is set to `optional`. /// Recognized Priorities as of now are : `required`, `important`, `standard`, `optional`, `extra` + #[serde(default)] pub priority: Option, /// Path of the uncompressed Changelog file, to be stored at /usr/share/doc/package-name/changelog.gz. See /// + #[serde(default)] pub changelog: Option, /// Path to script that will be executed before the package is unpacked. See /// + #[serde(default)] pub pre_install_script: Option, /// Path to script that will be executed after the package is unpacked. See /// + #[serde(default)] pub post_install_script: Option, /// Path to script that will be executed before the package is removed. See /// + #[serde(default)] pub pre_remove_script: Option, /// Path to script that will be executed after the package is removed. See /// + #[serde(default)] pub post_remove_script: Option, } #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub(crate) struct WixSettings { + #[serde(default)] pub(crate) language: Vec<(String, Option)>, + #[serde(default)] pub(crate) template: Option, + #[serde(default)] pub(crate) fragment_paths: Vec, + #[serde(default)] pub(crate) component_group_refs: Vec, + #[serde(default)] pub(crate) component_refs: Vec, + #[serde(default)] pub(crate) feature_group_refs: Vec, + #[serde(default)] pub(crate) feature_refs: Vec, + #[serde(default)] pub(crate) merge_refs: Vec, + #[serde(default)] pub(crate) skip_webview_install: bool, + #[serde(default)] pub(crate) license: Option, + #[serde(default)] pub(crate) enable_elevated_update_task: bool, + #[serde(default)] pub(crate) banner_path: Option, + #[serde(default)] pub(crate) dialog_image_path: Option, + #[serde(default)] pub(crate) fips_compliant: bool, /// MSI installer version in the format `major.minor.patch.build` (build is optional). /// @@ -87,6 +126,7 @@ pub(crate) struct WixSettings { /// The third and fourth fields have a maximum value of 65,535. /// /// See for more info. + #[serde(default)] pub version: Option, /// A GUID upgrade code for MSI installer. This code **_must stay the same across all of your updates_**, /// otherwise, Windows will treat your update as a different app and your users will have duplicate versions of your app. @@ -96,20 +136,31 @@ pub(crate) struct WixSettings { /// /// It is recommended that you set this value in your tauri config file to avoid accidental changes in your upgrade code /// whenever you want to change your product name. + #[serde(default)] pub upgrade_code: Option, } #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub(crate) struct MacOsSettings { + #[serde(default)] pub(crate) bundle_version: Option, + #[serde(default)] pub(crate) frameworks: Option>, + #[serde(default)] pub(crate) minimum_system_version: Option, + #[serde(default)] pub(crate) license: Option, + #[serde(default)] pub(crate) exception_domain: Option, + #[serde(default)] pub(crate) signing_identity: Option, + #[serde(default)] pub(crate) provider_short_name: Option, + #[serde(default)] pub(crate) entitlements: Option, + #[serde(default)] pub(crate) info_plist_path: Option, + #[serde(default)] pub(crate) bundle_name: Option, /// List of custom files to add to the application bundle. /// Maps the path in the Contents directory in the app to the path of the file to include (relative to the current working directory). @@ -126,19 +177,27 @@ fn default_hardened_runtime() -> bool { true } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, Default)] pub(crate) struct WindowsSettings { + #[serde(default)] pub(crate) digest_algorithm: Option, + #[serde(default)] pub(crate) certificate_thumbprint: Option, + #[serde(default)] pub(crate) timestamp_url: Option, #[serde(default)] pub(crate) tsp: bool, + #[serde(default)] pub(crate) wix: Option, + #[serde(default)] pub(crate) icon_path: Option, + #[serde(default)] pub(crate) webview_install_mode: WebviewInstallMode, + #[serde(default)] pub(crate) webview_fixed_runtime_path: Option, #[serde(default)] pub(crate) allow_downgrades: bool, + #[serde(default)] pub(crate) nsis: Option, /// Specify a custom command to sign the binaries. /// This command needs to have a `%1` in it which is just a placeholder for the binary path, @@ -152,31 +211,44 @@ pub(crate) struct WindowsSettings { /// By Default we use `signtool.exe` which can be found only on Windows so /// if you are on another platform and want to cross-compile and sign you will /// need to use another tool like `osslsigncode`. + #[serde(default)] pub sign_command: Option, } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub(crate) struct NsisSettings { + #[serde(default)] pub(crate) template: Option, + #[serde(default)] pub(crate) license: Option, + #[serde(default)] pub(crate) header_image: Option, + #[serde(default)] pub(crate) sidebar_image: Option, + #[serde(default)] pub(crate) installer_icon: Option, + #[serde(default)] pub(crate) install_mode: NSISInstallerMode, + #[serde(default)] pub(crate) languages: Option>, + #[serde(default)] pub(crate) custom_language_files: Option>, #[serde(default)] pub(crate) display_language_selector: bool, + #[serde(default)] pub(crate) start_menu_folder: Option, + #[serde(default)] pub(crate) installer_hooks: Option, /// Try to ensure that the WebView2 version is equal to or newer than this version, /// if the user's WebView2 is older than this version, /// the installer will try to trigger a WebView2 update. + #[serde(default)] pub minimum_webview2_version: Option, } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub(crate) enum NSISInstallerMode { + #[default] CurrentUser, PerMachine, Both,