diff --git a/.changes/bundler-compression-option.md b/.changes/bundler-compression-option.md new file mode 100644 index 000000000..301dbc6ad --- /dev/null +++ b/.changes/bundler-compression-option.md @@ -0,0 +1,5 @@ +--- +"tauri-utils": patch:breaking +--- + +Changed `NsisSettings::compression` field from `Option` to just `NsisCompression` \ No newline at end of file diff --git a/.changes/nsis-no-compression.md b/.changes/nsis-no-compression.md new file mode 100644 index 000000000..6e4f33e3e --- /dev/null +++ b/.changes/nsis-no-compression.md @@ -0,0 +1,6 @@ +--- +"tauri-utils": patch:feat +"tauri-bundler": patch:feat +--- + +Add an option to disable NSIS compression `bundle > nsis > compression: "none"` diff --git a/.changes/utils-compression-option.md b/.changes/utils-compression-option.md new file mode 100644 index 000000000..9757842eb --- /dev/null +++ b/.changes/utils-compression-option.md @@ -0,0 +1,5 @@ +--- +"tauri-utils": patch:breaking +--- + +Changed `NsisConfig::compression` field from `Option` to just `NsisCompression` \ No newline at end of file diff --git a/core/tauri-config-schema/schema.json b/core/tauri-config-schema/schema.json index 822d2f20e..43578ca10 100644 --- a/core/tauri-config-schema/schema.json +++ b/core/tauri-config-schema/schema.json @@ -2299,12 +2299,10 @@ }, "compression": { "description": "Set the compression algorithm used to compress files in the installer.\n\nSee ", - "anyOf": [ + "default": "lzma", + "allOf": [ { "$ref": "#/definitions/NsisCompression" - }, - { - "type": "null" } ] }, @@ -2367,6 +2365,13 @@ "enum": [ "lzma" ] + }, + { + "description": "Disable compression", + "type": "string", + "enum": [ + "none" + ] } ] }, diff --git a/core/tauri-utils/src/config.rs b/core/tauri-utils/src/config.rs index d8ee880c8..7bb2fc01b 100644 --- a/core/tauri-utils/src/config.rs +++ b/core/tauri-utils/src/config.rs @@ -691,6 +691,44 @@ pub enum NsisCompression { Bzip2, /// LZMA (default) is a new compression method that gives very good compression ratios. The decompression speed is high (10-20 MB/s on a 2 GHz CPU), the compression speed is lower. The memory size that will be used for decompression is the dictionary size plus a few KBs, the default is 8 MB. Lzma, + /// Disable compression + None, +} + +impl Default for NsisCompression { + fn default() -> Self { + Self::Lzma + } +} + +/// Install Modes for the NSIS installer. +#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] +pub enum NSISInstallerMode { + /// Default mode for the installer. + /// + /// Install the app by default in a directory that doesn't require Administrator access. + /// + /// Installer metadata will be saved under the `HKCU` registry path. + CurrentUser, + /// Install the app by default in the `Program Files` folder directory requires Administrator + /// access for the installation. + /// + /// Installer metadata will be saved under the `HKLM` registry path. + PerMachine, + /// Combines both modes and allows the user to choose at install time + /// whether to install for the current user or per machine. Note that this mode + /// will require Administrator access even if the user wants to install it for the current user only. + /// + /// Installer metadata will be saved under the `HKLM` or `HKCU` registry path based on the user's choice. + Both, +} + +impl Default for NSISInstallerMode { + fn default() -> Self { + Self::CurrentUser + } } /// Configuration for the Installer bundle using NSIS. @@ -736,7 +774,8 @@ pub struct NsisConfig { /// Set the compression algorithm used to compress files in the installer. /// /// See - pub compression: Option, + #[serde(default)] + pub compression: NsisCompression, /// A path to a `.nsh` file that contains special NSIS macros to be hooked into the /// main installer.nsi script. /// @@ -775,36 +814,6 @@ pub struct NsisConfig { pub installer_hooks: Option, } -/// Install Modes for the NSIS installer. -#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)] -#[serde(rename_all = "camelCase", deny_unknown_fields)] -#[cfg_attr(feature = "schema", derive(JsonSchema))] -pub enum NSISInstallerMode { - /// Default mode for the installer. - /// - /// Install the app by default in a directory that doesn't require Administrator access. - /// - /// Installer metadata will be saved under the `HKCU` registry path. - CurrentUser, - /// Install the app by default in the `Program Files` folder directory requires Administrator - /// access for the installation. - /// - /// Installer metadata will be saved under the `HKLM` registry path. - PerMachine, - /// Combines both modes and allows the user to choose at install time - /// whether to install for the current user or per machine. Note that this mode - /// will require Administrator access even if the user wants to install it for the current user only. - /// - /// Installer metadata will be saved under the `HKLM` or `HKCU` registry path based on the user's choice. - Both, -} - -impl Default for NSISInstallerMode { - fn default() -> Self { - Self::CurrentUser - } -} - /// Install modes for the Webview2 runtime. /// Note that for the updater bundle [`Self::DownloadBootstrapper`] is used. /// diff --git a/tooling/bundler/src/bundle/settings.rs b/tooling/bundler/src/bundle/settings.rs index c54949940..b77251109 100644 --- a/tooling/bundler/src/bundle/settings.rs +++ b/tooling/bundler/src/bundle/settings.rs @@ -416,7 +416,7 @@ pub struct NsisSettings { /// By default the OS language is selected, with a fallback to the first language in the `languages` array. pub display_language_selector: bool, /// Set compression algorithm used to compress files in the installer. - pub compression: Option, + pub compression: NsisCompression, /// A path to a `.nsh` file that contains special NSIS macros to be hooked into the /// main installer.nsi script. /// diff --git a/tooling/bundler/src/bundle/windows/nsis.rs b/tooling/bundler/src/bundle/windows/nsis.rs index 6940b08f6..1a8f32326 100644 --- a/tooling/bundler/src/bundle/windows/nsis.rs +++ b/tooling/bundler/src/bundle/windows/nsis.rs @@ -247,10 +247,11 @@ fn build_nsis_app_installer( data.insert( "compression", - to_json(match &nsis.compression.unwrap_or(NsisCompression::Lzma) { + to_json(match &nsis.compression { NsisCompression::Zlib => "zlib", NsisCompression::Bzip2 => "bzip2", NsisCompression::Lzma => "lzma", + NsisCompression::None => "none", }), ); diff --git a/tooling/bundler/src/bundle/windows/templates/installer.nsi b/tooling/bundler/src/bundle/windows/templates/installer.nsi index 82281d1ab..00a588d0a 100644 --- a/tooling/bundler/src/bundle/windows/templates/installer.nsi +++ b/tooling/bundler/src/bundle/windows/templates/installer.nsi @@ -1,9 +1,10 @@ Unicode true ManifestDPIAware true -; Set the compression algorithm. Default is LZMA. -!if "{{compression}}" == "" - SetCompressor /SOLID lzma + +!if "{{compression}}" == "none" + SetCompress false !else + ; Set the compression algorithm. Default is LZMA. SetCompressor /SOLID "{{compression}}" !endif diff --git a/tooling/cli/schema.json b/tooling/cli/schema.json index 822d2f20e..43578ca10 100644 --- a/tooling/cli/schema.json +++ b/tooling/cli/schema.json @@ -2299,12 +2299,10 @@ }, "compression": { "description": "Set the compression algorithm used to compress files in the installer.\n\nSee ", - "anyOf": [ + "default": "lzma", + "allOf": [ { "$ref": "#/definitions/NsisCompression" - }, - { - "type": "null" } ] }, @@ -2367,6 +2365,13 @@ "enum": [ "lzma" ] + }, + { + "description": "Disable compression", + "type": "string", + "enum": [ + "none" + ] } ] },