xtask/
main.rs

1use clap::error::ErrorKind;
2use clap::{CommandFactory, Parser};
3use cmd::Commands;
4use tracing::level_filters::LevelFilter;
5use tracing_subscriber::EnvFilter;
6
7mod cmd;
8mod utils;
9
10#[derive(Debug, clap::Parser)]
11#[command(
12    name = "cargo xtask",
13    bin_name = "cargo xtask",
14    about = "A utility for running commands in the workspace"
15)]
16struct Cli {
17    #[command(subcommand)]
18    command: Commands,
19}
20
21fn main() {
22    tracing_subscriber::fmt()
23        .with_env_filter(
24            EnvFilter::builder()
25                .with_default_directive(LevelFilter::INFO.into())
26                .from_env_lossy(),
27        )
28        .with_writer(std::io::stderr)
29        .init();
30
31    if let Err(err) = Cli::parse().command.run() {
32        Cli::command()
33            .error(ErrorKind::InvalidValue, format!("{err:#}\n\n{err:?}"))
34            .exit()
35    }
36}