From 033c93590fb859972bc1d6c6e11f860aafa11c19 Mon Sep 17 00:00:00 2001 From: Myriad-Dreamin Date: Fri, 19 Apr 2024 13:16:19 +0800 Subject: [PATCH 1/3] build: improve crates metadata for publish --- .gitmodules | 6 +- Cargo.lock | 1 - crates/mitex-cli/Cargo.toml | 8 +- crates/mitex-lexer/Cargo.toml | 4 +- crates/mitex-parser/Cargo.toml | 8 +- crates/mitex-spec-gen/Cargo.toml | 4 +- .../mitex-spec-gen/assets}/artifacts | 0 crates/mitex-spec-gen/build.rs | 79 ++++++++++++------- crates/mitex-spec-gen/src/lib.rs | 7 +- crates/mitex-spec/Cargo.toml | 4 +- crates/mitex-wasm/Cargo.toml | 4 +- crates/mitex/Cargo.toml | 5 +- 12 files changed, 74 insertions(+), 56 deletions(-) rename {assets => crates/mitex-spec-gen/assets}/artifacts (100%) diff --git a/.gitmodules b/.gitmodules index 477b242..662b7dc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ -[submodule "assets/artifacts"] - path = assets/artifacts +[submodule "crates/mitex-spec-gen/assets/artifacts"] + path = crates/mitex-spec-gen/assets/artifacts url = https://github.com/mitex-rs/artifacts - branch = v0.1.1 + branch = v0.2.2 diff --git a/Cargo.lock b/Cargo.lock index 0b29ec0..96e71f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -497,7 +497,6 @@ dependencies = [ name = "mitex" version = "0.2.4" dependencies = [ - "bitflags", "divan", "insta", "mitex-parser", diff --git a/crates/mitex-cli/Cargo.toml b/crates/mitex-cli/Cargo.toml index 27f25b7..1b06c5f 100644 --- a/crates/mitex-cli/Cargo.toml +++ b/crates/mitex-cli/Cargo.toml @@ -20,10 +20,10 @@ doc = false [dependencies] -mitex-spec-gen = { path = "../mitex-spec-gen" } -mitex-spec = { path = "../mitex-spec" } -mitex-parser = { path = "../mitex-parser" } -mitex = { path = "../mitex" } +mitex-spec-gen.workspace = true +mitex-spec.workspace = true +mitex-parser.workspace = true +mitex.workspace = true clap.workspace = true clap_builder.workspace = true diff --git a/crates/mitex-lexer/Cargo.toml b/crates/mitex-lexer/Cargo.toml index ee8bba6..c77e65f 100644 --- a/crates/mitex-lexer/Cargo.toml +++ b/crates/mitex-lexer/Cargo.toml @@ -10,7 +10,7 @@ repository.workspace = true [dependencies] -mitex-spec = { path = "../mitex-spec" } +mitex-spec.workspace = true logos.workspace = true ena.workspace = true @@ -19,7 +19,7 @@ fxhash.workspace = true once_cell.workspace = true [dev-dependencies] -mitex-spec-gen = { path = "../mitex-spec-gen" } +mitex-spec-gen.workspace = true insta.workspace = true divan.workspace = true diff --git a/crates/mitex-parser/Cargo.toml b/crates/mitex-parser/Cargo.toml index 9b33117..d3272ac 100644 --- a/crates/mitex-parser/Cargo.toml +++ b/crates/mitex-parser/Cargo.toml @@ -16,15 +16,15 @@ harness = false [dependencies] -mitex-glob = { path = "../mitex-glob" } -mitex-lexer = { path = "../mitex-lexer" } -mitex-spec = { path = "../mitex-spec" } +mitex-glob.workspace = true +mitex-lexer.workspace = true +mitex-spec.workspace = true rowan.workspace = true [dev-dependencies] -mitex-spec-gen = { path = "../mitex-spec-gen" } +mitex-spec-gen.workspace = true once_cell.workspace = true insta.workspace = true diff --git a/crates/mitex-spec-gen/Cargo.toml b/crates/mitex-spec-gen/Cargo.toml index 4dc18f2..324babd 100644 --- a/crates/mitex-spec-gen/Cargo.toml +++ b/crates/mitex-spec-gen/Cargo.toml @@ -9,12 +9,12 @@ homepage.workspace = true repository.workspace = true [dependencies] -mitex-spec = { path = "../mitex-spec" } +mitex-spec.workspace = true once_cell.workspace = true [build-dependencies] -mitex-spec = { path = "../mitex-spec" } +mitex-spec.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true anyhow.workspace = true diff --git a/assets/artifacts b/crates/mitex-spec-gen/assets/artifacts similarity index 100% rename from assets/artifacts rename to crates/mitex-spec-gen/assets/artifacts diff --git a/crates/mitex-spec-gen/build.rs b/crates/mitex-spec-gen/build.rs index ff49240..7b4934d 100644 --- a/crates/mitex-spec-gen/build.rs +++ b/crates/mitex-spec-gen/build.rs @@ -7,9 +7,12 @@ use anyhow::Context; use serde::{Deserialize, Serialize}; fn main() { + let project_root = get_project_root(); + let spec_builder = if cfg!(feature = "prebuilt") { copy_prebuilt - } else if cfg!(feature = "generate") || which::which("typst").is_ok() { + } else if cfg!(feature = "generate") || (which::which("typst").is_ok() && project_root.is_ok()) + { generate } else { // fallback to prebuilt spec @@ -23,25 +26,36 @@ fn main() { fn get_project_root() -> anyhow::Result { let project_root = - std::env::var("CARGO_MANIFEST_DIR").with_context(|| "failed to get project root")?; - Ok(std::path::Path::new(&project_root) - .parent() - .with_context(|| "failed to get project root")? - .parent() - .with_context(|| "failed to get project root")? - .to_owned()) + std::env::var("CARGO_MANIFEST_DIR").with_context(|| "failed to get manifest dir")?; + let mut project_root = std::path::Path::new(&project_root); + Ok(loop { + let parent = project_root + .parent() + .with_context(|| "failed to get project root")?; + if parent.join("Cargo.toml").exists() { + break parent.to_owned(); + } + project_root = parent; + }) } fn copy_prebuilt() -> anyhow::Result<()> { // println!("cargo:warning=copy_prebuilt"); - let project_root = get_project_root()?; + let manifest_dir = + std::env::var("CARGO_MANIFEST_DIR").with_context(|| "failed to get manifest dir")?; + let manifest_dir = std::path::Path::new(&manifest_dir); + let target_spec = + Path::new(&std::env::var("OUT_DIR").unwrap()).join("mitex-artifacts/spec/default.rkyv"); // assets/artifacts/spec/default.rkyv - std::fs::create_dir_all(project_root.join(Path::new("target/mitex-artifacts/spec"))) - .with_context(|| "failed to create target_dir for store spec")?; + std::fs::create_dir_all( + target_spec + .parent() + .context("failed to get dirname of target spec")?, + ) + .with_context(|| "failed to create target_dir for store spec")?; - let prebuilt_spec = project_root.join(Path::new("assets/artifacts/spec/default.rkyv")); - let target_spec = project_root.join(Path::new("target/mitex-artifacts/spec/default.rkyv")); + let prebuilt_spec = manifest_dir.join(Path::new("assets/artifacts/spec/default.rkyv")); println!("cargo:warning=Use prebuilt spec binaries at {prebuilt_spec:?}"); std::fs::copy(prebuilt_spec, target_spec).with_context(|| { @@ -64,21 +78,19 @@ fn generate() -> anyhow::Result<()> { spec_root = spec_root.display() ); - let target_dir = project_root.join("target/mitex-artifacts"); - - let package_specs = std::process::Command::new("typst") - .args([ - "query", - "--root", - project_root.to_str().unwrap(), - project_root - .join("packages/mitex/specs/mod.typ") - .to_str() - .unwrap(), - "", - ]) - .output() - .with_context(|| "failed to query metadata")?; + let target_dir = Path::new(&std::env::var("OUT_DIR").unwrap()).join("mitex-artifacts"); + + let mut package_specs = std::process::Command::new("typst"); + let package_specs = package_specs.args([ + "query", + "--root", + project_root.to_str().unwrap(), + project_root + .join("packages/mitex/specs/mod.typ") + .to_str() + .unwrap(), + "", + ]); #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] struct QueryItem { @@ -88,8 +100,15 @@ fn generate() -> anyhow::Result<()> { type Json = Vec>; let mut json_spec: mitex_spec::JsonCommandSpec = Default::default(); - let json_packages: Json = - serde_json::from_slice(&package_specs.stdout).expect("failed to parse package specs"); + let json_packages: Json = serde_json::from_slice( + &package_specs + .output() + .with_context(|| "failed to query metadata")? + .stdout, + ) + .context(format!( + "failed to parse package specs cmd: {package_specs:?}" + ))?; if json_packages.is_empty() { panic!("no package found"); } diff --git a/crates/mitex-spec-gen/src/lib.rs b/crates/mitex-spec-gen/src/lib.rs index fddc297..d5c1be5 100644 --- a/crates/mitex-spec-gen/src/lib.rs +++ b/crates/mitex-spec-gen/src/lib.rs @@ -9,7 +9,8 @@ use mitex_spec::CommandSpec; /// /// [repro-default]: https://github.com/mitex-rs/artifacts/blob/main/README.md#default-command-specification-since-v011 pub static DEFAULT_SPEC: once_cell::sync::Lazy = once_cell::sync::Lazy::new(|| { - CommandSpec::from_bytes(include_bytes!( - "../../../target/mitex-artifacts/spec/default.rkyv" - )) + CommandSpec::from_bytes(include_bytes!(concat!( + env!("OUT_DIR"), + "/mitex-artifacts/spec/default.rkyv" + ))) }); diff --git a/crates/mitex-spec/Cargo.toml b/crates/mitex-spec/Cargo.toml index 99e4ec7..6825457 100644 --- a/crates/mitex-spec/Cargo.toml +++ b/crates/mitex-spec/Cargo.toml @@ -25,8 +25,8 @@ rkyv-validation = ["dep:rkyv", "rkyv/validation"] default = ["serde", "rkyv", "rkyv-validation"] [dev-dependencies] -once_cell = "1" -divan = "0.1.7" +once_cell.workspace = true +divan.workspace = true [lints] workspace = true diff --git a/crates/mitex-wasm/Cargo.toml b/crates/mitex-wasm/Cargo.toml index 54fe1d6..0218209 100644 --- a/crates/mitex-wasm/Cargo.toml +++ b/crates/mitex-wasm/Cargo.toml @@ -13,8 +13,8 @@ crate-type = ["cdylib"] [dependencies] -mitex = { path = "../mitex" } -mitex-spec = { path = "../mitex-spec" } +mitex.workspace = true +mitex-spec.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/mitex/Cargo.toml b/crates/mitex/Cargo.toml index 55edb4c..62e984b 100644 --- a/crates/mitex/Cargo.toml +++ b/crates/mitex/Cargo.toml @@ -14,10 +14,9 @@ harness = false [dependencies] -mitex-parser = { path = "../mitex-parser" } -mitex-spec-gen = { path = "../mitex-spec-gen" } +mitex-parser.workspace = true +mitex-spec-gen.workspace = true rowan.workspace = true -bitflags = "2.4.1" [dev-dependencies] insta.workspace = true From f556e946bd71c84925f2237513ebb83b8c7d8113 Mon Sep 17 00:00:00 2001 From: Myriad-Dreamin Date: Fri, 19 Apr 2024 13:23:45 +0800 Subject: [PATCH 2/3] build: update publish script --- Cargo.lock | 20 ++++++++++---------- Cargo.toml | 7 +++++++ crates/mitex-wasm/Cargo.toml | 2 +- scripts/publish.ps1 | 8 ++++++++ 4 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 scripts/publish.ps1 diff --git a/Cargo.lock b/Cargo.lock index 96e71f8..52e7946 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -988,9 +988,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -998,9 +998,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", @@ -1013,9 +1013,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1023,9 +1023,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -1036,9 +1036,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-minimal-protocol" diff --git a/Cargo.toml b/Cargo.toml index 8539c14..868ba22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,13 @@ rowan = "0.15.15" which = "5.0.0" +mitex-spec = { version = "0.2.2", path = "crates/mitex-spec" } +mitex-glob = { version = "0.2.2", path = "crates/mitex-glob" } +mitex-lexer = { version = "0.2.2", path = "crates/mitex-lexer" } +mitex-parser = { version = "0.2.2", path = "crates/mitex-parser" } +mitex = { version = "0.2.2", path = "crates/mitex" } +mitex-spec-gen = { version = "0.2.2", path = "crates/mitex-spec-gen" } + clap = { version = "4.4", features = ["derive", "env", "unicode", "wrap_help"] } clap_builder = { version = "4", features = ["string"] } clap_complete = "4.4" diff --git a/crates/mitex-wasm/Cargo.toml b/crates/mitex-wasm/Cargo.toml index 0218209..c904274 100644 --- a/crates/mitex-wasm/Cargo.toml +++ b/crates/mitex-wasm/Cargo.toml @@ -19,7 +19,7 @@ mitex-spec.workspace = true serde.workspace = true serde_json.workspace = true -wasm-bindgen = { version = "0.2.74", optional = true } +wasm-bindgen = { version = "0.2.92", optional = true } wasm-minimal-protocol = { git = "https://github.com/astrale-sharp/wasm-minimal-protocol", optional = true } [features] diff --git a/scripts/publish.ps1 b/scripts/publish.ps1 new file mode 100644 index 0000000..9869d1c --- /dev/null +++ b/scripts/publish.ps1 @@ -0,0 +1,8 @@ +cargo publish -p mitex-glob +cargo publish -p mitex-spec +cargo publish -p mitex-spec-gen +cargo publish -p mitex-lexer +cargo publish -p mitex-parser +cargo publish -p mitex +# cargo publish -p mitex-wasm +cargo publish -p mitex-cli From f3c8fe8d1a126be4b5587469cd991f925d5aaae3 Mon Sep 17 00:00:00 2001 From: Myriad-Dreamin Date: Mon, 17 Jun 2024 13:09:00 +0800 Subject: [PATCH 3/3] build: rebase to main --- .gitmodules | 2 +- Cargo.toml | 12 ++++++------ crates/mitex-spec-gen/assets/artifacts | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitmodules b/.gitmodules index 662b7dc..2972940 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "crates/mitex-spec-gen/assets/artifacts"] path = crates/mitex-spec-gen/assets/artifacts url = https://github.com/mitex-rs/artifacts - branch = v0.2.2 + branch = v0.2.4 diff --git a/Cargo.toml b/Cargo.toml index 868ba22..93e8abe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,12 +31,12 @@ rowan = "0.15.15" which = "5.0.0" -mitex-spec = { version = "0.2.2", path = "crates/mitex-spec" } -mitex-glob = { version = "0.2.2", path = "crates/mitex-glob" } -mitex-lexer = { version = "0.2.2", path = "crates/mitex-lexer" } -mitex-parser = { version = "0.2.2", path = "crates/mitex-parser" } -mitex = { version = "0.2.2", path = "crates/mitex" } -mitex-spec-gen = { version = "0.2.2", path = "crates/mitex-spec-gen" } +mitex-spec = { version = "0.2.4", path = "crates/mitex-spec" } +mitex-glob = { version = "0.2.4", path = "crates/mitex-glob" } +mitex-lexer = { version = "0.2.4", path = "crates/mitex-lexer" } +mitex-parser = { version = "0.2.4", path = "crates/mitex-parser" } +mitex = { version = "0.2.4", path = "crates/mitex" } +mitex-spec-gen = { version = "0.2.4", path = "crates/mitex-spec-gen" } clap = { version = "4.4", features = ["derive", "env", "unicode", "wrap_help"] } clap_builder = { version = "4", features = ["string"] } diff --git a/crates/mitex-spec-gen/assets/artifacts b/crates/mitex-spec-gen/assets/artifacts index 6dd2b1a..9eb762a 160000 --- a/crates/mitex-spec-gen/assets/artifacts +++ b/crates/mitex-spec-gen/assets/artifacts @@ -1 +1 @@ -Subproject commit 6dd2b1a3f60e511c87e121034136b298109a2277 +Subproject commit 9eb762afa001b36205408c7615a73e5dfaa6f80a