Browse Source

feat(bundler): add `recommends` for deb and rpm (#11402)

closes #10351
Amr Bashir 9 months ago
parent
commit
6dea12a067

+ 6 - 0
.changes/bundler-linux-recommends.md

@@ -0,0 +1,6 @@
+---
+"tauri-bundler": "patch:feat"
+---
+
+Add `bundle > linux > deb > recommends` and `bundle > linux > rpm > recommends` fields to declare a strong, but not absolute, dependency for your `.deb` and `.rpm` packages.
+

+ 9 - 0
crates/tauri-bundler/src/bundle/linux/debian.rs

@@ -198,6 +198,15 @@ fn generate_control_file(
   if !dependencies.is_empty() {
     writeln!(file, "Depends: {}", dependencies.join(", "))?;
   }
+  let dependencies = settings
+    .deb()
+    .recommends
+    .as_ref()
+    .cloned()
+    .unwrap_or_default();
+  if !dependencies.is_empty() {
+    writeln!(file, "Recommends: {}", dependencies.join(", "))?;
+  }
   let provides = settings
     .deb()
     .provides

+ 11 - 0
crates/tauri-bundler/src/bundle/linux/rpm.rs

@@ -84,6 +84,17 @@ pub fn bundle_project(settings: &Settings) -> crate::Result<Vec<PathBuf>> {
     builder = builder.provides(Dependency::any(dep));
   }
 
+  // Add recommends
+  for dep in settings
+    .rpm()
+    .recommends
+    .as_ref()
+    .cloned()
+    .unwrap_or_default()
+  {
+    builder = builder.recommends(Dependency::any(dep));
+  }
+
   // Add conflicts
   for dep in settings
     .rpm()

+ 4 - 0
crates/tauri-bundler/src/bundle/settings.rs

@@ -170,6 +170,8 @@ pub struct DebianSettings {
   // OS-specific settings:
   /// the list of debian dependencies.
   pub depends: Option<Vec<String>>,
+  /// the list of debian dependencies recommendations.
+  pub recommends: Option<Vec<String>>,
   /// the list of dependencies the package provides.
   pub provides: Option<Vec<String>>,
   /// the list of package conflicts.
@@ -222,6 +224,8 @@ pub struct AppImageSettings {
 pub struct RpmSettings {
   /// The list of RPM dependencies your application relies on.
   pub depends: Option<Vec<String>>,
+  /// the list of of RPM dependencies your application recommends.
+  pub recommends: Option<Vec<String>>,
   /// The list of RPM dependencies your application provides.
   pub provides: Option<Vec<String>>,
   /// The list of RPM dependencies your application conflicts with. They must not be present

+ 20 - 0
crates/tauri-cli/config.schema.json

@@ -2574,6 +2574,16 @@
             "type": "string"
           }
         },
+        "recommends": {
+          "description": "The list of deb dependencies your application recommends.",
+          "type": [
+            "array",
+            "null"
+          ],
+          "items": {
+            "type": "string"
+          }
+        },
         "provides": {
           "description": "The list of dependencies the package provides.",
           "type": [
@@ -2685,6 +2695,16 @@
             "type": "string"
           }
         },
+        "recommends": {
+          "description": "The list of RPM dependencies your application recommends.",
+          "type": [
+            "array",
+            "null"
+          ],
+          "items": {
+            "type": "string"
+          }
+        },
         "provides": {
           "description": "The list of RPM dependencies your application provides.",
           "type": [

+ 2 - 0
crates/tauri-cli/src/interface/rust.rs

@@ -1346,6 +1346,7 @@ fn tauri_config_to_bundle_settings(
       } else {
         Some(depends_deb)
       },
+      recommends: config.linux.deb.recommends,
       provides: config.linux.deb.provides,
       conflicts: config.linux.deb.conflicts,
       replaces: config.linux.deb.replaces,
@@ -1368,6 +1369,7 @@ fn tauri_config_to_bundle_settings(
       } else {
         Some(depends_rpm)
       },
+      recommends: config.linux.rpm.recommends,
       provides: config.linux.rpm.provides,
       conflicts: config.linux.rpm.conflicts,
       obsoletes: config.linux.rpm.obsoletes,

+ 20 - 0
crates/tauri-schema-generator/schemas/config.schema.json

@@ -2574,6 +2574,16 @@
             "type": "string"
           }
         },
+        "recommends": {
+          "description": "The list of deb dependencies your application recommends.",
+          "type": [
+            "array",
+            "null"
+          ],
+          "items": {
+            "type": "string"
+          }
+        },
         "provides": {
           "description": "The list of dependencies the package provides.",
           "type": [
@@ -2685,6 +2695,16 @@
             "type": "string"
           }
         },
+        "recommends": {
+          "description": "The list of RPM dependencies your application recommends.",
+          "type": [
+            "array",
+            "null"
+          ],
+          "items": {
+            "type": "string"
+          }
+        },
         "provides": {
           "description": "The list of RPM dependencies your application provides.",
           "type": [

+ 5 - 0
crates/tauri-utils/src/config.rs

@@ -331,6 +331,8 @@ pub struct AppImageConfig {
 pub struct DebConfig {
   /// The list of deb dependencies your application relies on.
   pub depends: Option<Vec<String>>,
+  /// The list of deb dependencies your application recommends.
+  pub recommends: Option<Vec<String>>,
   /// The list of dependencies the package provides.
   pub provides: Option<Vec<String>>,
   /// The list of package conflicts.
@@ -398,6 +400,8 @@ pub struct LinuxConfig {
 pub struct RpmConfig {
   /// The list of RPM dependencies your application relies on.
   pub depends: Option<Vec<String>>,
+  /// The list of RPM dependencies your application recommends.
+  pub recommends: Option<Vec<String>>,
   /// The list of RPM dependencies your application provides.
   pub provides: Option<Vec<String>>,
   /// The list of RPM dependencies your application conflicts with. They must not be present
@@ -442,6 +446,7 @@ impl Default for RpmConfig {
   fn default() -> Self {
     Self {
       depends: None,
+      recommends: None,
       provides: None,
       conflicts: None,
       obsoletes: None,