Browse Source

Merge pull request #314 from AppFlowy-IO/fix_dart_pb

ci: fix dart pb
Nathan.fooo 3 năm trước cách đây
mục cha
commit
32e0b5e96d

+ 2 - 2
.github/workflows/ci.yaml

@@ -32,8 +32,8 @@ jobs:
         run: |
           cargo install --force cargo-make
           cargo install --force duckscript_cli
-          brew install protobuf
           cargo make flowy_dev
+          echo PATH="$PATH":"$HOME/.pub-cache/bin" >> $GITHUB_PATH
       - name: Build
         working-directory: frontend
         run: cargo make --profile production-mac-x86 appflowy
@@ -74,8 +74,8 @@ jobs:
         run: |
           cargo install --force cargo-make
           cargo install --force duckscript_cli
-          sudo apt-get install protobuf-compiler
           cargo make flowy_dev
+          echo PATH="$PATH":"$HOME/.pub-cache/bin" >> $GITHUB_PATH
       - name: Build
         working-directory: frontend
         run: cargo make --profile production-linux-x86 appflowy

+ 1 - 1
frontend/scripts/makefile/desktop.toml

@@ -5,7 +5,7 @@
 # cargo make --profile production-windows-x86 flowy-sdk-dev
 
 [tasks.env_check]
-dependencies = ["echo_env", "install-pb-tool-if-need"]
+dependencies = ["echo_env", "install_protobuf"]
 condition = { env_set = [ "BUILD_FLAG", "RUST_COMPILE_TARGET", "CRATE_TYPE", "TARGET_OS"],  channels = ["stable"] }
 
 [tasks.flowy-sdk-dev]

+ 16 - 10
frontend/scripts/makefile/protobuf.toml

@@ -2,16 +2,14 @@
 [tasks.pb]
 dependencies = ["check_protoc_cmd", "gen_pb_file"]
 
-[tasks.install-pb-tool-if-need]
+[tasks.install_protobuf]
 condition_script = [
     """
-    if [ ! "$(command -v dart)" ]; then
-        echo Please make sure flutter/dart is properly installed and in PATH env var
-        exit 1
+    if [ ! "$(command -v protoc)" ]; then
+        exit 0
     fi
 
     if [ ! "$(command -v protoc-gen-dart)" ]; then
-        # not install
         exit 0
     fi
 
@@ -19,19 +17,27 @@ condition_script = [
     exit 1
     """,
 ]
-run_task = { name = ["install_protobuf"] }
+run_task = { name = ["install_protobuf_compiler"] }
 
-[tasks.install_protobuf]
+[tasks.install_protobuf_compiler]
 script = """
+brew install protobuf
+
 echo "Install protoc_plugin (Dart)"
 dart pub global activate protoc_plugin
-export PATH="$HOME/.pub-cache/bin:$PATH"
+"""
+script_runner = "@shell"
+
+[tasks.install_protobuf_compiler.linux]
+script = """
+sudo apt-get install protobuf-compiler
 
-cargo install --version 2.22.1 protobuf-codegen
+echo "Install protoc_plugin (Dart)"
+dart pub global activate protoc_plugin
 """
 script_runner = "@shell"
 
-[tasks.install_protobuf.windows]
+[tasks.install_protobuf_compiler.windows]
 script = """
 ret = which dart
 if is_empty ${ret}

+ 39 - 5
shared-lib/lib-infra/src/pb_gen.rs

@@ -1,10 +1,12 @@
+#![allow(clippy::all)]
 #![allow(unused_imports)]
 #![allow(unused_attributes)]
+#![allow(dead_code)]
 use std::fs::File;
 use std::io::Write;
+use std::process::Command;
 use walkdir::WalkDir;
 
-#[allow(dead_code)]
 pub fn gen(name: &str, root: &str) {
     let mut paths = vec![];
     let mut file_names = vec![];
@@ -20,9 +22,10 @@ pub fn gen(name: &str, root: &str) {
             file_names.push(file_name);
         }
     }
+    println!("cargo:rerun-if-changed=build.rs");
 
-    // #[cfg(feature = "dart")]
-    // gen_pb_for_dart(name, root, &paths, &file_names);
+    #[cfg(feature = "dart")]
+    gen_pb_for_dart(name, root, &paths, &file_names);
 
     protoc_rust::Codegen::new()
         .out_dir("./src/protobuf/model")
@@ -33,7 +36,6 @@ pub fn gen(name: &str, root: &str) {
 }
 
 #[cfg(feature = "dart")]
-#[allow(dead_code)]
 fn gen_pb_for_dart(name: &str, root: &str, paths: &Vec<String>, file_names: &Vec<String>) {
     let output = format!(
         "{}/{}/{}",
@@ -44,13 +46,17 @@ fn gen_pb_for_dart(name: &str, root: &str, paths: &Vec<String>, file_names: &Vec
     if !std::path::Path::new(&output).exists() {
         std::fs::create_dir_all(&output).unwrap();
     }
+    check_pb_compiler();
+
+    check_pb_dart_plugin();
+
     paths.iter().for_each(|path| {
         if cmd_lib::run_cmd! {
             protoc --dart_out=${output} --proto_path=${root} ${path}
         }
         .is_err()
         {
-            panic!("Run flutter protoc fail")
+            panic!("Generate pb file failed with: {}", path)
         };
     });
 
@@ -78,3 +84,31 @@ fn gen_pb_for_dart(name: &str, root: &str, paths: &Vec<String>, file_names: &Vec
         }
     }
 }
+
+fn check_pb_compiler() {
+    assert!(run_command("command -v protoc"), "protoc was not installed correctly");
+}
+
+fn check_pb_dart_plugin() {
+    assert!(
+        run_command("command -v protoc-gen-dart"),
+        "protoc-gen-dart was not installed correctly"
+    );
+}
+
+fn run_command(cmd: &str) -> bool {
+    let output = if cfg!(target_os = "windows") {
+        Command::new("cmd")
+            .arg("/C")
+            .arg(cmd)
+            .status()
+            .expect("failed to execute process")
+    } else {
+        Command::new("sh")
+            .arg("-c")
+            .arg(cmd)
+            .status()
+            .expect("failed to execute process")
+    };
+    output.success()
+}