use {
anyhow::Result,
anza_xtask as xtask,
clap::{Args, Parser, Subcommand},
log::error,
};
#[derive(Parser)]
#[command(name = "cargo-anza-xtask", bin_name = "cargo")]
enum Cargo {
#[command(about = "Build tasks", version, display_name = "cargo-anza-xtask")]
AnzaXtask(Xtask),
}
#[derive(Args)]
struct Xtask {
#[command(flatten)]
pub global: GlobalOptions,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
#[command(about = "Hello")]
Hello,
#[command(about = "Bump version")]
BumpVersion(xtask::commands::bump_version::CommandArgs),
#[command(about = "Update crate version")]
UpdateCrate(xtask::commands::update_crate::CommandArgs),
#[command(about = "Publish crates")]
Publish(xtask::commands::publish::CommandArgs),
#[command(about = "Check dev-dependencies")]
DevDeps(xtask::commands::dev_deps::CommandArgs),
}
#[derive(Args, Debug)]
pub struct GlobalOptions {
#[arg(short, long, global = true)]
pub verbose: bool,
}
fn main() {
if let Err(err) = try_main() {
error!("Error: {err}");
for (i, cause) in err.chain().skip(1).enumerate() {
error!(" {}: {}", i.saturating_add(1), cause);
}
std::process::exit(1);
}
}
fn try_main() -> Result<()> {
let Cargo::AnzaXtask(xtask) = Cargo::parse();
if xtask.global.verbose {
std::env::set_var("RUST_LOG", "debug");
} else {
std::env::set_var("RUST_LOG", "info");
}
env_logger::init();
match xtask.command {
Commands::Hello => xtask::commands::hello::run()?,
Commands::BumpVersion(args) => {
xtask::commands::bump_version::run(args)?;
}
Commands::UpdateCrate(args) => {
xtask::commands::update_crate::run(args)?;
}
Commands::Publish(args) => {
xtask::commands::publish::run(args)?;
}
Commands::DevDeps(args) => {
xtask::commands::dev_deps::run(args)?;
}
}
Ok(())
}