ソースを参照

fix(cli): properly exit with code 0 on panic when running with bun (#10572)

Lucas Fernandes Nogueira 11 ヶ月 前
コミット
41c7a6646b
2 ファイル変更28 行追加6 行削除
  1. 5 0
      .changes/fix-cli-panic-bun.md
  2. 23 6
      tooling/cli/node/src/lib.rs

+ 5 - 0
.changes/fix-cli-panic-bun.md

@@ -0,0 +1,5 @@
+---
+"@tauri-apps/cli": patch:bug
+---
+
+Exit with code 1 if a panic occurs when running the CLI with `bun`.

+ 23 - 6
tooling/cli/node/src/lib.rs

@@ -14,12 +14,29 @@ pub fn run(args: Vec<String>, bin_name: Option<String>, callback: JsFunction) ->
 
   // we need to run in a separate thread so Node.js consumers
   // can do work while `tauri dev` is running.
-  std::thread::spawn(move || match tauri_cli::try_run(args, bin_name) {
-    Ok(_) => function.call(Ok(true), ThreadsafeFunctionCallMode::Blocking),
-    Err(e) => function.call(
-      Err(Error::new(Status::GenericFailure, format!("{:#}", e))),
-      ThreadsafeFunctionCallMode::Blocking,
-    ),
+  std::thread::spawn(move || {
+    let res = match std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
+      tauri_cli::try_run(args, bin_name)
+    })) {
+      Ok(t) => t,
+      Err(e) => {
+        return function.call(
+          Err(Error::new(
+            Status::GenericFailure,
+            "Tauri CLI unexpected panic",
+          )),
+          ThreadsafeFunctionCallMode::Blocking,
+        );
+      }
+    };
+
+    match res {
+      Ok(_) => function.call(Ok(true), ThreadsafeFunctionCallMode::Blocking),
+      Err(e) => function.call(
+        Err(Error::new(Status::GenericFailure, format!("{:#}", e))),
+        ThreadsafeFunctionCallMode::Blocking,
+      ),
+    }
   });
 
   Ok(())