diff --git a/examples/min_version.toml b/examples/min_version.toml new file mode 100644 index 00000000..aab0c411 --- /dev/null +++ b/examples/min_version.toml @@ -0,0 +1,3 @@ + +[config] +min_version = "0.20.1" diff --git a/src/lib/cli.rs b/src/lib/cli.rs index 389c6cb5..16ab43fd 100644 --- a/src/lib/cli.rs +++ b/src/lib/cli.rs @@ -92,6 +92,20 @@ fn run(cli_args: CliArgs, global_config: &GlobalConfig) { let experimental = cli_args.experimental; let config = descriptor::load(&build_file, force_makefile, env, experimental); + match config.config.min_version { + Some(ref min_version) => { + if version::is_newer_found(&min_version) { + error!( + "{} version: {} does not meet minimum required version: {}", + &cli_args.command, &VERSION, &min_version + ); + } + + () + } + None => (), + }; + match config.config.additional_profiles { Some(ref profiles) => profile::set_additional(profiles), None => profile::set_additional(&vec![]), diff --git a/src/lib/types.rs b/src/lib/types.rs index 73cd989a..47d9391c 100755 --- a/src/lib/types.rs +++ b/src/lib/types.rs @@ -1353,6 +1353,8 @@ pub struct ConfigSection { pub on_error_task: Option, /// Additional profile names to load pub additional_profiles: Option>, + /// Minimum cargo-make/makers version + pub min_version: Option, /// Invoked while loading the descriptor file but before loading any extended descriptor pub load_script: Option>, /// acts like load_script if runtime OS is Linux (takes precedence over load_script) @@ -1373,6 +1375,7 @@ impl ConfigSection { end_task: None, on_error_task: None, additional_profiles: None, + min_version: None, load_script: None, linux_load_script: None, windows_load_script: None, @@ -1439,6 +1442,10 @@ impl ConfigSection { self.additional_profiles = extended.additional_profiles.clone(); } + if extended.min_version.is_some() { + self.min_version = extended.min_version.clone(); + } + if extended.load_script.is_some() { self.load_script = extended.load_script.clone(); } diff --git a/src/lib/types_test.rs b/src/lib/types_test.rs index e4b20c82..f4aa4729 100755 --- a/src/lib/types_test.rs +++ b/src/lib/types_test.rs @@ -1971,6 +1971,7 @@ fn config_section_new() { assert!(config.end_task.is_none()); assert!(config.on_error_task.is_none()); assert!(config.additional_profiles.is_none()); + assert!(config.min_version.is_none()); assert!(config.load_script.is_none()); assert!(config.linux_load_script.is_none()); assert!(config.windows_load_script.is_none()); diff --git a/src/lib/version.rs b/src/lib/version.rs index e357a3a6..35937f53 100755 --- a/src/lib/version.rs +++ b/src/lib/version.rs @@ -93,10 +93,10 @@ pub(crate) fn is_newer(old_string: &str, new_string: &str, default_result: bool) } } -fn is_newer_found(latest_string: &str) -> bool { - debug!("Checking Version: {}", &latest_string); +pub(crate) fn is_newer_found(version_string: &str) -> bool { + debug!("Checking Version: {}", &version_string); - is_newer(&VERSION, &latest_string, false) + is_newer(&VERSION, &version_string, false) } fn print_notification(latest_string: &str) {