diff --git a/Cargo.lock b/Cargo.lock index ae51134d..61e080be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli 0.26.1", + "gimli 0.26.2", ] [[package]] @@ -184,9 +184,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e" [[package]] name = "bytesize" @@ -216,6 +216,17 @@ dependencies = [ "toml", ] +[[package]] +name = "cargo_toml" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185" +dependencies = [ + "serde", + "serde_derive", + "toml", +] + [[package]] name = "cc" version = "1.0.73" @@ -392,9 +403,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -402,9 +413,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", @@ -413,9 +424,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" +checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" dependencies = [ "autocfg", "cfg-if 1.0.0", @@ -427,9 +438,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" dependencies = [ "cfg-if 1.0.0", "once_cell", @@ -447,9 +458,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" dependencies = [ "quote", "syn", @@ -769,9 +780,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -999,9 +1010,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" [[package]] name = "h2" @@ -1029,7 +1040,7 @@ version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ - "bytes 1.1.0", + "bytes 1.2.0", "fnv", "futures-core", "futures-sink", @@ -1037,16 +1048,16 @@ dependencies = [ "http", "indexmap", "slab", - "tokio 1.20.0", + "tokio 1.20.1", "tokio-util 0.7.3", "tracing", ] [[package]] name = "hashbrown" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" @@ -1078,7 +1089,7 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ - "bytes 1.1.0", + "bytes 1.2.0", "fnv", "itoa 1.0.2", ] @@ -1099,7 +1110,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "bytes 1.1.0", + "bytes 1.2.0", "http", "pin-project-lite 0.2.9", ] @@ -1161,7 +1172,7 @@ version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ - "bytes 1.1.0", + "bytes 1.2.0", "futures-channel", "futures-core", "futures-util", @@ -1173,7 +1184,7 @@ dependencies = [ "itoa 1.0.2", "pin-project-lite 0.2.9", "socket2 0.4.4", - "tokio 1.20.0", + "tokio 1.20.1", "tower-service", "tracing", "want", @@ -1198,10 +1209,10 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.1.0", + "bytes 1.2.0", "hyper 0.14.20", "native-tls", - "tokio 1.20.0", + "tokio 1.20.1", "tokio-native-tls", ] @@ -1375,9 +1386,9 @@ checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "js-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" dependencies = [ "wasm-bindgen", ] @@ -1466,15 +1477,16 @@ checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] name = "marine" -version = "0.12.1" +version = "0.12.2" dependencies = [ "Inflector", "anyhow", "atty", + "cargo_toml 0.11.5", "check-latest", "clap", "exitfailure", - "marine-it-generator 0.9.0", + "marine-it-generator 0.9.1", "marine-it-parser 0.9.1", "marine-module-info-parser 0.3.0", "semver 0.11.0", @@ -1482,6 +1494,7 @@ dependencies = [ "serde_json", "termion", "thiserror", + "toml", "walrus", ] @@ -1505,7 +1518,7 @@ dependencies = [ "it-lilo", "it-memory-traits", "log", - "marine-it-generator 0.9.0", + "marine-it-generator 0.9.1", "marine-it-interfaces 0.7.1", "marine-it-parser 0.9.1", "marine-min-it-version 0.1.0", @@ -1540,7 +1553,7 @@ dependencies = [ "it-lilo", "it-memory-traits", "log", - "marine-it-generator 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "marine-it-generator 0.9.0", "marine-it-interfaces 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "marine-it-parser 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "marine-min-it-version 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1564,10 +1577,12 @@ dependencies = [ [[package]] name = "marine-it-generator" version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "274f94a718f5e2f0a47b44de4dc2226f243374bdd5c16b3439bb538040269db8" dependencies = [ - "cargo_toml", + "cargo_toml 0.8.1", "it-lilo", - "marine-it-parser 0.9.1", + "marine-it-parser 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "marine-macro-impl", "once_cell", "serde", @@ -1579,13 +1594,10 @@ dependencies = [ [[package]] name = "marine-it-generator" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "274f94a718f5e2f0a47b44de4dc2226f243374bdd5c16b3439bb538040269db8" +version = "0.9.1" dependencies = [ - "cargo_toml", "it-lilo", - "marine-it-parser 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "marine-it-parser 0.9.1", "marine-macro-impl", "once_cell", "serde", @@ -2318,10 +2330,11 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pest" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "823635055522a82e92ebd61dbe07ce53e180c8989cced4715eaec10baa1baeb7" dependencies = [ + "thiserror", "ucd-trie", ] @@ -2417,9 +2430,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" dependencies = [ "unicode-ident", ] @@ -2524,9 +2537,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -2537,7 +2550,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f" dependencies = [ - "redox_syscall 0.2.13", + "redox_syscall 0.2.16", ] [[package]] @@ -2558,7 +2571,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom 0.2.7", - "redox_syscall 0.2.13", + "redox_syscall 0.2.16", "thiserror", ] @@ -2630,7 +2643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" dependencies = [ "base64", - "bytes 1.1.0", + "bytes 1.2.0", "encoding_rs", "futures-core", "futures-util", @@ -2650,7 +2663,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "tokio 1.20.0", + "tokio 1.20.1", "tokio-native-tls", "tower-service", "url", @@ -2818,9 +2831,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.139" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6" +checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" dependencies = [ "serde_derive", ] @@ -2846,9 +2859,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.139" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb" +checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" dependencies = [ "proc-macro2", "quote", @@ -2940,9 +2953,12 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" @@ -3039,7 +3055,7 @@ dependencies = [ "cfg-if 1.0.0", "fastrand", "libc", - "redox_syscall 0.2.13", + "redox_syscall 0.2.16", "remove_dir_all", "winapi 0.3.9", ] @@ -3072,7 +3088,7 @@ checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" dependencies = [ "libc", "numtoa", - "redox_syscall 0.2.13", + "redox_syscall 0.2.16", "redox_termios", ] @@ -3176,12 +3192,12 @@ dependencies = [ [[package]] name = "tokio" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e" +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" dependencies = [ "autocfg", - "bytes 1.1.0", + "bytes 1.2.0", "libc", "memchr", "mio 0.8.4", @@ -3210,7 +3226,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", - "tokio 1.20.0", + "tokio 1.20.1", ] [[package]] @@ -3243,11 +3259,11 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ - "bytes 1.1.0", + "bytes 1.2.0", "futures-core", "futures-sink", "pin-project-lite 0.2.9", - "tokio 1.20.0", + "tokio 1.20.1", "tracing", ] @@ -3541,9 +3557,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" dependencies = [ "cfg-if 1.0.0", "serde", @@ -3553,13 +3569,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -3568,9 +3584,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.31" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" +checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -3580,9 +3596,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3590,9 +3606,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ "proc-macro2", "quote", @@ -3603,9 +3619,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" [[package]] name = "wasm-build-rs" @@ -3849,9 +3865,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/crates/it-generator/Cargo.toml b/crates/it-generator/Cargo.toml index d9471391..214edec2 100644 --- a/crates/it-generator/Cargo.toml +++ b/crates/it-generator/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "marine-it-generator" description = "Fluence Marine interface types generator" -version = "0.9.0" +version = "0.9.1" authors = ["Fluence Labs"] license = "Apache-2.0" edition = "2018" @@ -22,4 +22,3 @@ walrus = "0.18.0" once_cell = "1.4.0" serde = { version = "1.0.118", features = ["derive"] } serde_json = "1.0.56" -cargo_toml = "0.8.1" diff --git a/tools/cli/Cargo.toml b/tools/cli/Cargo.toml index f986a107..4209ec43 100644 --- a/tools/cli/Cargo.toml +++ b/tools/cli/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "marine" description = "Fluence Marine command line tool" -version = "0.12.1" +version = "0.12.2" authors = ["Fluence Labs"] repository = "https://github.com/fluencelabs/marine/tools/cli" license = "Apache-2.0" @@ -12,14 +12,15 @@ name = "marine" path = "src/main.rs" [dependencies] -marine-it-generator = { path = "../../crates/it-generator", version = "0.9.0" } +marine-it-generator = { path = "../../crates/it-generator", version = "0.9.1" } marine-it-parser = { path = "../../crates/it-parser", version = "0.9.1" } marine-module-info-parser = { path = "../../crates/module-info-parser", version = "0.3.0" } +cargo_toml = "0.11.5" semver = "0.11.0" walrus = "0.18.0" Inflector = "0.11.4" - +toml = "0.5.9" atty = "0.2.14" thiserror = "1.0.24" anyhow = "1.0.31" diff --git a/tools/cli/src/build.rs b/tools/cli/src/build.rs index 2998cc2f..0dc31970 100644 --- a/tools/cli/src/build.rs +++ b/tools/cli/src/build.rs @@ -17,23 +17,24 @@ use crate::CLIResult; use crate::errors::CLIError; -use std::process::Command; +use semver::Version; -// TODO: use sdk version from cargo.toml -const RUST_SDK_VERSION: &str = "0.7.0"; +use std::path::PathBuf; +use std::process::Command; #[derive(serde::Deserialize)] #[serde(tag = "reason", rename_all = "kebab-case")] enum DiagnosticMessage { BuildScriptExecuted, BuildFinished, - CompilerArtifact { filenames: Vec }, + CompilerArtifact { + filenames: Vec, + manifest_path: PathBuf, + }, RunWithArgs, } pub(crate) fn build(trailing_args: Vec<&str>) -> CLIResult<()> { - use std::str::FromStr; - let mut cargo = Command::new("cargo"); cargo.arg("build").arg("--target").arg("wasm32-wasi"); cargo.arg("--message-format").arg("json-render-diagnostics"); @@ -44,15 +45,27 @@ pub(crate) fn build(trailing_args: Vec<&str>) -> CLIResult<()> { // that DiagnosticMessage represents let output = crate::utils::run_command_piped(cargo) .map_err(|e| CLIError::WasmCompilationError(e.to_string()))?; - let mut wasms: Vec = Vec::new(); + let mut wasms: Vec<(String, Version)> = Vec::new(); for line in output.lines() { - if let Ok(DiagnosticMessage::CompilerArtifact { filenames }) = serde_json::from_str(line) { - wasms.extend( - filenames - .into_iter() - .filter(|name| name.ends_with(".wasm")) - .collect::>(), - ) + if let Ok(DiagnosticMessage::CompilerArtifact { + filenames, + manifest_path, + }) = serde_json::from_str(line) + { + use crate::cargo_manifest::extract_sdk_version; + + let new_wasms = filenames + .into_iter() + .filter(|name| name.ends_with(".wasm")) + .collect::>(); + if !new_wasms.is_empty() { + let sdk_version = extract_sdk_version(&manifest_path)?; + wasms.extend( + new_wasms + .into_iter() + .map(|name| (name, sdk_version.clone())), + ) + } } } @@ -61,11 +74,14 @@ pub(crate) fn build(trailing_args: Vec<&str>) -> CLIResult<()> { return Ok(()); } - let version = semver::Version::from_str(RUST_SDK_VERSION).unwrap(); - for wasm in wasms { + for (wasm, sdk_version) in wasms { let wasm_path = std::path::PathBuf::from(wasm); marine_it_generator::embed_it(&wasm_path)?; - marine_module_info_parser::sdk_version::embed_from_path(&wasm_path, &wasm_path, &version)?; + marine_module_info_parser::sdk_version::embed_from_path( + &wasm_path, + &wasm_path, + &sdk_version, + )?; } Ok(()) diff --git a/tools/cli/src/cargo_manifest.rs b/tools/cli/src/cargo_manifest.rs new file mode 100644 index 00000000..87101e99 --- /dev/null +++ b/tools/cli/src/cargo_manifest.rs @@ -0,0 +1,48 @@ +use cargo_toml::{Dependency, Error as CargoTomlError, Manifest}; +use toml::de::Error as TomlError; +use semver::Version; +use thiserror::Error as ThisError; + +use std::path::Path; +use std::str::FromStr; + +const SKD_CRATE_NAME: &str = "marine-rs-sdk"; + +#[derive(Debug, ThisError)] +pub enum ManifestError { + #[error("Cannot load file: {0}")] + Io(#[from] std::io::Error), + #[error("Cannot parse file: {0}")] + ParseError(#[from] TomlError), + #[error("Cannot find marine-rs-sdk dependency")] + NoSdkDependencyError, + #[error("Cannot find version of marine-rs-sdk dependency")] + NoSdkVersionError, + #[error("Cannot parse marine-rs-sdk version: {0}")] + VersionParseError(#[from] semver::SemVerError), +} + +pub(crate) fn extract_sdk_version(path: &Path) -> Result { + let path = Path::new(&path); + let manifest = Manifest::from_path(&path).map_err(|e| -> ManifestError { + match e { + CargoTomlError::Parse(e) => e.into(), + CargoTomlError::Io(e) => e.into(), + } + })?; + + let dependency = manifest + .dependencies + .get(SKD_CRATE_NAME) + .ok_or(ManifestError::NoSdkDependencyError)?; + + let version = match dependency { + Dependency::Simple(version) => version, + Dependency::Detailed(detail) => detail + .version + .as_ref() + .ok_or(ManifestError::NoSdkVersionError)?, + }; + + Version::from_str(&version).map_err(Into::into) +} diff --git a/tools/cli/src/errors.rs b/tools/cli/src/errors.rs index 438bc252..2517f959 100644 --- a/tools/cli/src/errors.rs +++ b/tools/cli/src/errors.rs @@ -14,6 +14,8 @@ * limitations under the License. */ +use crate::cargo_manifest::ManifestError; + use marine_module_info_parser::ModuleInfoError; use marine_it_generator::ITGeneratorError; use marine_it_parser::ITParserError; @@ -27,15 +29,15 @@ pub enum CLIError { NoSuchCommand(String), /// A error occurred while embedding rust sdk version. - #[error("{0}")] + #[error(transparent)] VersionEmbeddingError(#[from] ModuleInfoError), /// An error occurred while generating interface types. - #[error("{0}")] + #[error(transparent)] ITGeneratorError(#[from] ITGeneratorError), /// An error occurred while parsing interface types. - #[error("{0}")] + #[error(transparent)] ITParserError(#[from] ITParserError), /// An error occurred when no Wasm file was compiled. @@ -45,4 +47,7 @@ pub enum CLIError { /// Various errors related to I/O operations. #[error("{0:?}")] IOError(#[from] std::io::Error), + + #[error(transparent)] + ManifestError(#[from] ManifestError), } diff --git a/tools/cli/src/main.rs b/tools/cli/src/main.rs index 0298c1ad..58abbd83 100644 --- a/tools/cli/src/main.rs +++ b/tools/cli/src/main.rs @@ -33,6 +33,7 @@ mod build; mod errors; mod generate; mod utils; +mod cargo_manifest; pub(crate) type CLIResult = std::result::Result;