use std::process::ExitCode;
use clap::Parser;
mod bump;
mod changelog;
mod changeset;
mod commands;
mod package_json;
mod package_lock;
#[derive(Parser)]
#[command(version, args_conflicts_with_subcommands = true)]
struct Cli {
#[command(subcommand)]
command: Option<Command>,
#[command(flatten)]
add: AddArgs,
}
#[derive(clap::Args)]
struct AddArgs {
#[arg(short, long)]
bump: Option<bump::Bump>,
#[arg(short, long)]
message: Option<String>,
}
#[derive(clap::Subcommand)]
enum Command {
Init,
Add(AddArgs),
Version {
#[arg(short = 'n', long)]
dry_run: bool,
},
Current,
Changelog {
version: String,
},
}
fn main() -> ExitCode {
match run() {
Ok(()) => ExitCode::SUCCESS,
Err(err) => {
eprintln!("error: {err:#}");
ExitCode::FAILURE
}
}
}
fn run() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command.unwrap_or(Command::Add(cli.add)) {
Command::Init => commands::init::run(),
Command::Add(AddArgs { bump, message }) => commands::add::run(bump, message),
Command::Version { dry_run } => commands::version::run(dry_run),
Command::Current => commands::current::run(),
Command::Changelog { version } => commands::changelog::run(&version),
}
}