From aae20ea8dfc53b59378de6859af661c7a21ef973 Mon Sep 17 00:00:00 2001 From: Timofey Date: Thu, 18 Apr 2024 12:56:49 +0000 Subject: [PATCH] feat: Move common build code to sails-builder --- Cargo.lock | 21 ++-- Cargo.toml | 128 +++++++++++++------------ builder/Cargo.toml | 13 +++ builder/src/lib.rs | 37 +++++++ examples/puppeteer/wasm/Cargo.toml | 3 +- examples/puppeteer/wasm/build.rs | 4 +- examples/rmrk/catalog/wasm/Cargo.toml | 3 +- examples/rmrk/catalog/wasm/build.rs | 13 +-- examples/rmrk/resource/wasm/Cargo.toml | 3 +- examples/rmrk/resource/wasm/build.rs | 13 +-- examples/this-that-svc/wasm/Cargo.toml | 3 +- examples/this-that-svc/wasm/build.rs | 13 +-- 12 files changed, 141 insertions(+), 113 deletions(-) create mode 100644 builder/Cargo.toml create mode 100644 builder/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 5bfd6d1f..6373b38d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3359,10 +3359,9 @@ dependencies = [ name = "puppeteer-svc" version = "0.1.0" dependencies = [ - "gear-wasm-builder", "gstd", "puppeteer-app", - "sails-idlgen", + "sails-builder", "sails-rtl", ] @@ -3637,9 +3636,8 @@ dependencies = [ name = "rmrk-catalog" version = "0.1.0" dependencies = [ - "gear-wasm-builder", "rmrk-catalog-app", - "sails-idlgen", + "sails-builder", ] [[package]] @@ -3657,11 +3655,10 @@ dependencies = [ name = "rmrk-resource" version = "0.1.0" dependencies = [ - "gear-wasm-builder", "gtest", "rmrk-catalog", "rmrk-resource-app", - "sails-idlgen", + "sails-builder", "sails-rtl", "tokio", ] @@ -3746,6 +3743,15 @@ version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +[[package]] +name = "sails-builder" +version = "0.0.1" +dependencies = [ + "gear-wasm-builder", + "sails-idl-meta", + "sails-idlgen", +] + [[package]] name = "sails-clientgen" version = "0.0.1" @@ -4749,9 +4755,8 @@ dependencies = [ name = "this-that-svc" version = "0.1.0" dependencies = [ - "gear-wasm-builder", "gstd", - "sails-idlgen", + "sails-builder", "this-that-svc-app", ] diff --git a/Cargo.toml b/Cargo.toml index 7d32270f..5677e220 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,63 +1,65 @@ -[workspace.package] -version = "0.0.1" -authors = ["Gear Technologies"] -edition = "2021" -license = "GPL-3.0" - -[workspace] -resolver = "2" -members = [ - "client-gen", - "examples/puppeteer/app", - "examples/puppeteer/wasm", - "examples/rmrk/catalog/app", - "examples/rmrk/catalog/wasm", - "examples/rmrk/resource/app", - "examples/rmrk/resource/wasm", - "examples/this-that-svc/app", - "examples/this-that-svc/wasm", - "idl-meta", - "idlgen", - "idlparser", - "macros", - "macros/core", - "rtl", -] - -[workspace.dependencies] -anyhow = "1" -convert-case = { package = "convert_case", version = "0.6" } -futures = { version = "0.3", default-features = false } -gear-core-errors = "1.1.1" -git-download = "0.1" -gstd = "1.1.1" -gtest = "1.1.1" -gwasm-builder = { package = "gear-wasm-builder", version = "1.1.1" } -handlebars = "4.4" -hashbrown = "0.14" -hex = { version = "0.4", default-features = false } -insta = "1.34" -itertools = "0.12" -lalrpop = { version = "0.20", default-features = false } -lalrpop-util = "0.20" -logos = "0.13" -parity-scale-codec = { version = "3.6", default-features = false } -prettyplease = "0.2" -proc-macro-error = "1.0" -proc-macro2 = { version = "1", default-features = false } -quote = "1.0" -sails-clientgen = { path = "client-gen" } -sails-exec-context-gstd = { path = "exec-context/gstd" } -sails-idl-meta = { path = "idl-meta" } -sails-idlgen = { path = "idlgen" } -sails-idlparser = { path = "idlparser" } -sails-macros = { path = "macros" } -sails-rtl = { path = "rtl" } -scale-info = { version = "2.10", default-features = false } -serde = "1.0" -serde-json = { package = "serde_json", version = "1.0" } -syn = "2.0" -thiserror = "1.0" -thiserror-no-std = "2.0" -tokio = "1.36" -trybuild = "1" +[workspace.package] +version = "0.0.1" +authors = ["Gear Technologies"] +edition = "2021" +license = "GPL-3.0" + +[workspace] +members = [ + "builder", + "client-gen", + "examples/puppeteer/app", + "examples/puppeteer/wasm", + "examples/rmrk/catalog/app", + "examples/rmrk/catalog/wasm", + "examples/rmrk/resource/app", + "examples/rmrk/resource/wasm", + "examples/this-that-svc/app", + "examples/this-that-svc/wasm", + "idl-meta", + "idlgen", + "idlparser", + "macros", + "macros/core", + "rtl", +] +resolver = "2" + +[workspace.dependencies] +anyhow = "1" +convert-case = { package = "convert_case", version = "0.6" } +futures = { version = "0.3", default-features = false } +gear-core-errors = "1.1.1" +git-download = "0.1" +gstd = "1.1.1" +gtest = "1.1.1" +gwasm-builder = { package = "gear-wasm-builder", version = "1.1.1" } +handlebars = "4.4" +hashbrown = "0.14" +hex = { version = "0.4", default-features = false } +insta = "1.34" +itertools = "0.12" +lalrpop = { version = "0.20", default-features = false } +lalrpop-util = "0.20" +logos = "0.13" +parity-scale-codec = { version = "3.6", default-features = false } +prettyplease = "0.2" +proc-macro-error = "1.0" +proc-macro2 = { version = "1", default-features = false } +quote = "1.0" +sails-builder = { path = "builder" } +sails-clientgen = { path = "client-gen" } +sails-exec-context-gstd = { path = "exec-context/gstd" } +sails-idl-meta = { path = "idl-meta" } +sails-idlgen = { path = "idlgen" } +sails-idlparser = { path = "idlparser" } +sails-macros = { path = "macros" } +sails-rtl = { path = "rtl" } +scale-info = { version = "2.10", default-features = false } +serde = "1.0" +serde-json = { package = "serde_json", version = "1.0" } +syn = "2.0" +thiserror = "1.0" +thiserror-no-std = "2.0" +tokio = "1.36" +trybuild = "1" diff --git a/builder/Cargo.toml b/builder/Cargo.toml new file mode 100644 index 00000000..32383a1c --- /dev/null +++ b/builder/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "sails-builder" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +sails-idlgen.workspace = true +gwasm-builder.workspace = true +sails-idl-meta.workspace = true diff --git a/builder/src/lib.rs b/builder/src/lib.rs new file mode 100644 index 00000000..fd75c64e --- /dev/null +++ b/builder/src/lib.rs @@ -0,0 +1,37 @@ +use sails_idl_meta::{ProgramMeta, ServiceMeta}; +use std::{env, fs::File, path::PathBuf}; + +pub struct Builder { + idl_file_path: PathBuf, +} + +impl Builder { + pub fn new() -> Self { + let pkg_name = env::var("CARGO_PKG_NAME").unwrap(); + let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); + + let idl_file_path = PathBuf::from(manifest_dir).join(format!("{}.idl", pkg_name)); + + Self { idl_file_path } + } + + pub fn build(self) -> Self { + gwasm_builder::build(); + + self + } + + pub fn generate_service_idl(self) -> Self { + let idl_file = File::create(&self.idl_file_path).unwrap(); + sails_idlgen::service::generate_idl::(idl_file).unwrap(); + + self + } + + pub fn generate_program_idl(self) -> Self { + let idl_file = File::create(&self.idl_file_path).unwrap(); + sails_idlgen::program::generate_idl::

(idl_file).unwrap(); + + self + } +} diff --git a/examples/puppeteer/wasm/Cargo.toml b/examples/puppeteer/wasm/Cargo.toml index 18befae0..cfd389c0 100644 --- a/examples/puppeteer/wasm/Cargo.toml +++ b/examples/puppeteer/wasm/Cargo.toml @@ -9,6 +9,5 @@ sails-rtl.workspace = true puppeteer-app = { path = "../app" } [build-dependencies] -gwasm-builder.workspace = true -sails-idlgen.workspace = true +sails-builder.workspace = true puppeteer-app = { path = "../app" } diff --git a/examples/puppeteer/wasm/build.rs b/examples/puppeteer/wasm/build.rs index 6e682ab9..14e7faa0 100644 --- a/examples/puppeteer/wasm/build.rs +++ b/examples/puppeteer/wasm/build.rs @@ -1,3 +1,5 @@ +use sails_builder::Builder; + fn main() { - gwasm_builder::build(); + Builder::new().build(); } diff --git a/examples/rmrk/catalog/wasm/Cargo.toml b/examples/rmrk/catalog/wasm/Cargo.toml index 421d718f..d8dde7b8 100644 --- a/examples/rmrk/catalog/wasm/Cargo.toml +++ b/examples/rmrk/catalog/wasm/Cargo.toml @@ -7,6 +7,5 @@ edition = "2021" rmrk-catalog-app = { path = "../app" } [build-dependencies] -gwasm-builder.workspace = true -sails-idlgen.workspace = true rmrk-catalog-app = { path = "../app" } # Used for generating IDL (service metadata) +sails-builder.workspace = true diff --git a/examples/rmrk/catalog/wasm/build.rs b/examples/rmrk/catalog/wasm/build.rs index eee5a9c8..ad7df197 100644 --- a/examples/rmrk/catalog/wasm/build.rs +++ b/examples/rmrk/catalog/wasm/build.rs @@ -1,15 +1,6 @@ use rmrk_catalog_app::Program; -use sails_idlgen::program; -use std::{env, fs::File, path::PathBuf}; +use sails_builder::Builder; fn main() { - gwasm_builder::build(); - - let manifest_dir_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); - - let idl_file_path = manifest_dir_path.join("rmrk-catalog.idl"); - - let idl_file = File::create(idl_file_path).unwrap(); - - program::generate_idl::(idl_file).unwrap(); + Builder::new().build().generate_program_idl::(); } diff --git a/examples/rmrk/resource/wasm/Cargo.toml b/examples/rmrk/resource/wasm/Cargo.toml index 00694a9b..3219e92d 100644 --- a/examples/rmrk/resource/wasm/Cargo.toml +++ b/examples/rmrk/resource/wasm/Cargo.toml @@ -7,9 +7,8 @@ edition = "2021" rmrk-resource-app = { path = "../app" } [build-dependencies] -gwasm-builder.workspace = true rmrk-resource-app = { path = "../app" } -sails-idlgen.workspace = true +sails-builder.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/examples/rmrk/resource/wasm/build.rs b/examples/rmrk/resource/wasm/build.rs index bb74f4d8..57588e02 100644 --- a/examples/rmrk/resource/wasm/build.rs +++ b/examples/rmrk/resource/wasm/build.rs @@ -1,15 +1,6 @@ use rmrk_resource_app::Program; -use sails_idlgen::program; -use std::{env, fs::File, path::PathBuf}; +use sails_builder::Builder; fn main() { - gwasm_builder::build(); - - let manifest_dir_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); - - let idl_file_path = manifest_dir_path.join("rmrk-resource.idl"); - - let idl_file = File::create(idl_file_path).unwrap(); - - program::generate_idl::(idl_file).unwrap(); + Builder::new().build().generate_program_idl::(); } diff --git a/examples/this-that-svc/wasm/Cargo.toml b/examples/this-that-svc/wasm/Cargo.toml index b1058027..92ff1da5 100644 --- a/examples/this-that-svc/wasm/Cargo.toml +++ b/examples/this-that-svc/wasm/Cargo.toml @@ -8,6 +8,5 @@ gstd.workspace = true this-that-svc-app = { path = "../app" } [build-dependencies] -gwasm-builder.workspace = true -sails-idlgen.workspace = true +sails-builder.workspace = true this-that-svc-app = { path = "../app" } diff --git a/examples/this-that-svc/wasm/build.rs b/examples/this-that-svc/wasm/build.rs index 1a34b2a8..554c6ad8 100644 --- a/examples/this-that-svc/wasm/build.rs +++ b/examples/this-that-svc/wasm/build.rs @@ -1,15 +1,6 @@ -use sails_idlgen::service; -use std::{env, fs::File, path::PathBuf}; use this_that_svc_app::MyService; +use sails_builder::Builder; fn main() { - gwasm_builder::build(); - - let manifest_dir_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); - - let idl_file_path = manifest_dir_path.join("this-that-svc.idl"); - - let idl_file = File::create(idl_file_path).unwrap(); - - service::generate_idl::(idl_file).unwrap(); + Builder::new().build().generate_service_idl::(); }