use clap::Parser;
use colored::*;
use log::{debug, error};
use update_informer::{Check, registry};
use volo_cli::model;
fn main() {
if std::env::var("RUST_LOG").is_err() {
unsafe { std::env::set_var("RUST_LOG", "WARN") };
}
pretty_env_logger::init();
if std::env::var("VOLO_DISABLE_UPDATE_CHECK").is_ok() {
debug!("Update check is disabled by env var VOLO_DISABLE_UPDATE_CHECK");
} else {
let pkg_name = env!("CARGO_PKG_NAME");
let current_version = env!("CARGO_PKG_VERSION");
let informer = update_informer::new(registry::Crates, pkg_name, current_version);
if let Some(version) = informer.check_version().ok().flatten() {
let outdated_msg = format!(
"A new release of {pkg_name} is available: v{current_version} -> {new_version}",
pkg_name = pkg_name.italic().cyan(),
current_version = current_version,
new_version = version.to_string().green()
);
let update_command = format!("cargo install {pkg_name}").yellow();
let update_msg =
format!("You can use '{update_command}' to update to the latest version.",);
println!("\n{outdated_msg}\n{update_msg}\n");
}
}
let cmd = model::RootCommand::parse();
match cmd.verbose {
0 => log::set_max_level(log::LevelFilter::Info),
1 => log::set_max_level(log::LevelFilter::Debug),
_ => log::set_max_level(log::LevelFilter::Trace),
}
debug!("Command parse result: {cmd:?}");
let res = cmd.run();
if let Err(e) = res.as_ref() {
error!("{e}");
}
if res.is_err() {
std::process::exit(1);
}
}