anza-xtask 0.1.0

Blockchain, Rebuilt for Scale
Documentation
use {
    anyhow::Result,
    anza_xtask as xtask,
    clap::{Args, Parser, Subcommand},
    log::error,
};

#[derive(Parser)]
#[command(name = "anza-xtask", about = "Build tasks", version)]
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 xtask = Xtask::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(())
}