#[cfg(test)]
#[path = "cli_test.rs"]
mod cli_test;
use crate::cli_commands;
use crate::cli_parser;
use crate::config;
use crate::descriptor;
use crate::environment;
use crate::logger;
use crate::logger::LoggerOptions;
use crate::profile;
use crate::recursion_level;
use crate::runner;
use crate::time_summary;
use crate::toolchain;
use crate::types::{CliArgs, GlobalConfig};
use crate::version;
use std::time::SystemTime;
pub(crate) static VERSION: &str = env!("CARGO_PKG_VERSION");
pub(crate) static AUTHOR: &str = env!("CARGO_PKG_AUTHORS");
pub(crate) static DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
pub(crate) static DEFAULT_TOML: &str = "Makefile.toml";
pub(crate) static DEFAULT_LOG_LEVEL: &str = "info";
pub(crate) static DEFAULT_TASK_NAME: &str = "default";
pub(crate) static DEFAULT_OUTPUT_FORMAT: &str = "default";
fn run(cli_args: CliArgs, global_config: &GlobalConfig) {
let start_time = SystemTime::now();
recursion_level::increment();
logger::init(&LoggerOptions {
level: cli_args.log_level.clone(),
color: !cli_args.disable_color,
});
if recursion_level::is_top() {
info!("{} {}", &cli_args.command, &VERSION);
debug!("Written By {}", &AUTHOR);
}
debug!("Cli Args {:#?}", &cli_args);
debug!("Global Configuration {:#?}", &global_config);
if version::should_check(&cli_args, &global_config) {
version::check();
}
toolchain::remove_rust_env_vars();
let cwd_string_option = match cli_args.cwd.clone() {
Some(value) => Some(value),
None => match global_config.search_project_root {
Some(search) => {
if search {
match environment::get_project_root() {
Some(value) => Some(value.clone()),
None => None,
}
} else {
None
}
}
None => None,
},
};
let cwd = match cwd_string_option {
Some(ref value) => Some(value.as_ref()),
None => None,
};
let home = environment::setup_cwd(cwd);
let force_makefile = cli_args.build_file.is_some();
let build_file = &cli_args
.build_file
.clone()
.unwrap_or(DEFAULT_TOML.to_string());
let task = &cli_args.task;
let profile_name = &cli_args
.profile
.clone()
.unwrap_or_else(profile::default_profile);
let normalized_profile_name = profile::set(&profile_name);
environment::load_env_file(cli_args.env_file.clone());
let env = cli_args.env.clone();
let experimental = cli_args.experimental;
let descriptor_load_result = descriptor::load(&build_file, force_makefile, env, experimental);
let config = match descriptor_load_result {
Ok(config) => config,
Err(ref error) => {
error!("{}", error);
panic!("{}", error);
}
};
let mut time_summary_vec = vec![];
time_summary::add(
&mut time_summary_vec,
"[Load Makefiles]",
start_time.clone(),
);
let step_time = SystemTime::now();
match config.config.additional_profiles {
Some(ref profiles) => profile::set_additional(profiles),
None => profile::set_additional(&vec![]),
};
let env_info = environment::setup_env(&cli_args, &config, &task, home, &mut time_summary_vec);
time_summary::add(&mut time_summary_vec, "[Setup Env]", step_time);
let crate_name = envmnt::get_or("CARGO_MAKE_CRATE_NAME", "");
if crate_name.len() > 0 {
info!("Project: {}", &crate_name);
}
info!("Build File: {}", &build_file);
info!("Task: {}", &task);
info!("Profile: {}", &normalized_profile_name);
profile::set(&normalized_profile_name);
if cli_args.list_all_steps || cli_args.list_category_steps.is_some() {
cli_commands::list_steps::run(
&config,
&cli_args.output_format,
&cli_args.output_file,
cli_args.list_category_steps,
cli_args.hide_uninteresting,
);
} else if cli_args.diff_execution_plan {
let default_config = descriptor::load_internal_descriptors(true, experimental, None);
cli_commands::diff_steps::run(
&default_config,
&config,
&task,
&cli_args,
&env_info.crate_info,
);
} else if cli_args.print_only {
cli_commands::print_steps::print(
&config,
&task,
&cli_args.output_format,
cli_args.disable_workspace,
cli_args.skip_tasks_pattern,
&env_info.crate_info,
);
} else {
runner::run(
config,
&task,
env_info,
&cli_args,
start_time,
time_summary_vec,
);
}
}
pub(crate) fn run_cli(command_name: String, sub_command: bool) {
let global_config = config::load();
let cli_args = cli_parser::parse(&global_config, &command_name, sub_command);
run(cli_args, &global_config);
}