diff --git a/Cargo.lock b/Cargo.lock index b5c33ae959f0e3cdcc654e603dfe46ac4ddcf8b4..4f388ac04cf087393ddcd6fc0fd0d4fe3ff7d810 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3412,6 +3412,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + [[package]] name = "version_check" version = "0.9.3" @@ -3568,6 +3574,7 @@ dependencies = [ "anyhow", "run_script", "structopt", + "version-compare", "version_check", ] diff --git a/rust-bins/xtask/Cargo.toml b/rust-bins/xtask/Cargo.toml index 461aea4f2230c8c4c43b367361288faedcee2f3f..07f47486a41c49792b9522da62fd4df76c12cd2d 100644 --- a/rust-bins/xtask/Cargo.toml +++ b/rust-bins/xtask/Cargo.toml @@ -17,3 +17,4 @@ anyhow = "1.0.32" run_script = "0.6.3" structopt = "0.3.18" version_check = "0.9.2" +version-compare = "0.0.11" diff --git a/rust-bins/xtask/src/main.rs b/rust-bins/xtask/src/main.rs index bb1bbf3e0798818a49fe831c9833c88dc372b9f5..ed7c83bc394e48f4e52bb113f1c20b9e25eb3651 100644 --- a/rust-bins/xtask/src/main.rs +++ b/rust-bins/xtask/src/main.rs @@ -16,9 +16,12 @@ use anyhow::Result; use std::process::{Command, Output}; use structopt::StructOpt; +use version_compare::Version; const MIN_RUST_VERSION: &str = "1.51.0"; -const NODE_VERSION: &str = "10.22.1"; +const MIN_NODE_VERSION: &str = "10.18.0"; +const REC_NODE_VERSION: &str = "10.22.1"; +const MAX_NODE_VERSION: &str = "11.0.0"; #[derive(StructOpt)] struct DuniterXTask { @@ -54,18 +57,21 @@ fn main() -> Result<()> { if !args.skip_npm { println!("Check node version …"); - if exec_and_get_stdout(Command::new("node").arg("-v")) - .unwrap_or_default() - .trim_end() - != format!("v{}", NODE_VERSION) - { + let node_vers = exec_and_get_stdout(Command::new("node").arg("-v")).unwrap_or_default(); + let node_vers = node_vers.trim_end(); + let node_vers_cut = Version::from(&node_vers[1..]).unwrap(); + let min_node_vers = Version::from(MIN_NODE_VERSION).unwrap(); + let max_node_vers = Version::from(MAX_NODE_VERSION).unwrap(); + if node_vers_cut < min_node_vers || max_node_vers <= node_vers_cut { eprintln!( - "Duniter requires node v{} exactly. Please install node v{} (you can use nvm).", - NODE_VERSION, NODE_VERSION + "Duniter requires node between v{} and v{} excluded.\n\ + Please install a correct node version (you can use nvm).\n\ + Current version {}. Recommended version v{}", + MIN_NODE_VERSION, MAX_NODE_VERSION, node_vers, REC_NODE_VERSION ); std::process::exit(1); } else { - println!("Node v{} already installed ✔", NODE_VERSION); + println!("Node {} installed: Is a compatible version ✔", node_vers); } } match args.command {