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}