Procházet zdrojové kódy

fix(cli.rs): crate packaging (#1481)

Co-authored-by: nothingismagick <denjell@mailscript.com>
Lucas Fernandes Nogueira před 4 roky
rodič
revize
5f3a12c557

+ 0 - 1
.gitignore

@@ -70,7 +70,6 @@ TODO.md
 # Tauri output
 /bundle.json
 /config.json
-/src-tauri
 
 # rust compiled folders
 target

+ 1 - 0
tooling/cli.rs/Cargo.toml

@@ -6,6 +6,7 @@ version = "1.0.0-beta-rc.0"
 authors = [ "Lucas Nogueira <lucas@tauri.studio>" ]
 edition = "2018"
 license = "Apache-2.0 OR MIT"
+include = ["src/", "/templates", "MergeModules/", "*.json", "*.rs"]
 
 [[bin]]
 name = "cargo-tauri"

+ 0 - 0
tooling/cli.rs/src/MergeModules/Microsoft_VC142_CRT_x64.msm → tooling/cli.rs/MergeModules/Microsoft_VC142_CRT_x64.msm


+ 0 - 0
tooling/cli.rs/src/MergeModules/Microsoft_VC142_CRT_x86.msm → tooling/cli.rs/MergeModules/Microsoft_VC142_CRT_x86.msm


+ 8 - 0
tooling/cli.rs/metadata.json

@@ -0,0 +1,8 @@
+{
+  "cli.js": {
+    "version": "1.0.0-beta-rc.0",
+    "node": ">= 10.17.0"
+  },
+  "tauri": "1.0.0-beta-rc.0",
+  "tauri-build": "1.0.0-beta-rc.0"
+}

+ 2 - 2
tooling/cli.rs/src/build.rs

@@ -116,13 +116,13 @@ impl Build {
           let _ = std::fs::remove_file(out_dir.join("Microsoft_VC142_CRT_x64.msm"));
           (
             "Microsoft_VC142_CRT_x86.msm",
-            include_bytes!("./MergeModules/Microsoft_VC142_CRT_x86.msm").to_vec(),
+            include_bytes!("../MergeModules/Microsoft_VC142_CRT_x86.msm").to_vec(),
           )
         } else {
           let _ = std::fs::remove_file(out_dir.join("Microsoft_VC142_CRT_x86.msm"));
           (
             "Microsoft_VC142_CRT_x64.msm",
-            include_bytes!("./MergeModules/Microsoft_VC142_CRT_x64.msm").to_vec(),
+            include_bytes!("../MergeModules/Microsoft_VC142_CRT_x64.msm").to_vec(),
           )
         };
         std::fs::write(out_dir.join(filename), vcruntime_msm)?;

+ 14 - 15
tooling/cli.rs/src/info.rs

@@ -16,17 +16,6 @@ use std::{
   process::Command,
 };
 
-#[derive(Deserialize)]
-struct PackageJsonEngines {
-  node: String,
-}
-
-#[derive(Deserialize)]
-struct PackageJson {
-  version: String,
-  engines: PackageJsonEngines,
-}
-
 #[derive(Deserialize)]
 struct YarnVersionInfo {
   data: Vec<String>,
@@ -43,6 +32,17 @@ struct CargoLock {
   package: Vec<CargoLockPackage>,
 }
 
+#[derive(Deserialize)]
+struct JsCliVersionMetadata {
+  version: String,
+  node: String,
+}
+
+#[derive(Deserialize)]
+struct VersionMetadata {
+  js_cli: JsCliVersionMetadata,
+}
+
 #[derive(Clone, Deserialize)]
 struct CargoManifestDependencyPackage {
   version: Option<String>,
@@ -279,16 +279,15 @@ impl Info {
 
     if let Some(node_version) = get_version("node", &[]).unwrap_or_default() {
       InfoBlock::new("Node.js environment").section().display();
-      let cli_package_json: PackageJson =
-        serde_json::from_str(include_str!("../../cli.js/package.json"))?;
+      let metadata = serde_json::from_str::<VersionMetadata>(include_str!("../metadata.json"))?;
       VersionBlock::new(
         "  Node.js",
         node_version.chars().skip(1).collect::<String>(),
       )
-      .target_version(cli_package_json.engines.node.replace(">= ", ""))
+      .target_version(metadata.js_cli.node.replace(">= ", ""))
       .display();
 
-      VersionBlock::new("  @tauri-apps/cli", cli_package_json.version)
+      VersionBlock::new("  @tauri-apps/cli", metadata.js_cli.version)
         .target_version(npm_latest_version(use_yarn, "@tauri-apps/cli").unwrap_or_default())
         .display();
       if let Some(app_dir) = &app_dir {

+ 15 - 18
tooling/cli.rs/src/init.rs

@@ -14,16 +14,13 @@ use handlebars::{to_json, Handlebars};
 use include_dir::{include_dir, Dir};
 use serde::Deserialize;
 
-const TEMPLATE_DIR: Dir = include_dir!("./templates");
+const TEMPLATE_DIR: Dir = include_dir!("templates");
 
 #[derive(Deserialize)]
-struct ManifestPackage {
-  version: String,
-}
-
-#[derive(Deserialize)]
-struct Manifest {
-  package: ManifestPackage,
+struct VersionMetadata {
+  tauri: String,
+  #[serde(rename = "tauri-build")]
+  tauri_build: String,
 }
 
 pub struct Init {
@@ -93,6 +90,7 @@ impl Init {
   pub fn run(self) -> crate::Result<()> {
     let logger = Logger::new("tauri:init");
     let template_target_path = self.directory.join("src-tauri");
+    let metadata = serde_json::from_str::<VersionMetadata>(include_str!("../metadata.json"))?;
     if template_target_path.exists() && !self.force {
       logger.warn(format!(
         "Tauri dir ({:?}) not empty. Run `init --force template` to overwrite.",
@@ -111,16 +109,9 @@ impl Init {
           ),
         )
       } else {
-        let tauri_manifest: Manifest =
-          toml::from_str(include_str!("../../../core/tauri/Cargo.toml")).unwrap();
-        let tauri_build_manifest: Manifest =
-          toml::from_str(include_str!("../../../core/tauri-build/Cargo.toml")).unwrap();
         (
-          format!(r#"{{ version = "{}" }}"#, tauri_manifest.package.version),
-          format!(
-            r#"{{ version = "{}" }}"#,
-            tauri_build_manifest.package.version
-          ),
+          format!(r#"{{ version = "{}" }}"#, metadata.tauri),
+          format!(r#"{{ version = "{}" }}"#, metadata.tauri_build),
         )
       };
 
@@ -166,7 +157,13 @@ fn render_template<P: AsRef<Path>>(
 ) -> crate::Result<()> {
   create_dir_all(out_dir.as_ref().join(dir.path()))?;
   for file in dir.files() {
-    let mut output_file = File::create(out_dir.as_ref().join(file.path()))?;
+    let mut file_path = file.path().to_path_buf();
+    // cargo for some reason ignores the /templates folder packaging when it has a Cargo.toml file inside
+    // so we rename the extension to `.crate-manifest`
+    if file_path.extension().unwrap() == "crate-manifest" {
+      file_path.set_extension("toml");
+    }
+    let mut output_file = File::create(out_dir.as_ref().join(file_path))?;
     if let Some(utf8) = file.contents_utf8() {
       handlebars
         .render_template_to_write(utf8, &data, &mut output_file)

+ 0 - 6
tooling/cli.rs/templates/src-tauri/.gitignore

@@ -2,9 +2,3 @@
 # will have compiled files and executables
 /target/
 WixTools
-
-# These are backup files generated by rustfmt
-**/*.rs.bk
-
-config.json
-bundle.json

+ 0 - 0
tooling/cli.rs/templates/src-tauri/Cargo.toml → tooling/cli.rs/templates/src-tauri/Cargo.crate-manifest