Files
QuiCommit/src/main.rs

102 lines
2.6 KiB
Rust

use anyhow::Result;
use clap::{Parser, Subcommand};
use tracing::debug;
mod commands;
mod config;
mod generator;
mod git;
mod i18n;
mod llm;
mod utils;
use commands::{
changelog::ChangelogCommand, commit::CommitCommand, config::ConfigCommand,
init::InitCommand, profile::ProfileCommand, tag::TagCommand,
};
/// QuiCommit - AI-powered Git assistant
///
/// A powerful tool that helps you generate conventional commits, tags, and changelogs
/// using AI (LLM APIs or local Ollama models). Manage multiple Git profiles for different
/// work contexts seamlessly.
#[derive(Parser)]
#[command(name = "quicommit")]
#[command(about = "AI-powered Git assistant for conventional commits, tags, and changelogs")]
#[command(version = env!("CARGO_PKG_VERSION"))]
#[command(propagate_version = true)]
#[command(arg_required_else_help = true)]
struct Cli {
/// Enable verbose output
#[arg(short, long, global = true, action = clap::ArgAction::Count)]
verbose: u8,
/// Configuration file path
#[arg(short, long, global = true, env = "QUICOMMIT_CONFIG")]
config: Option<String>,
/// Disable colored output
#[arg(long, global = true, env = "NO_COLOR")]
no_color: bool,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// Initialize quicommit configuration
#[command(alias = "i")]
Init(InitCommand),
/// Generate and execute conventional commits
#[command(alias = "c")]
Commit(CommitCommand),
/// Generate and create Git tags
#[command(alias = "t")]
Tag(TagCommand),
/// Generate changelog
#[command(alias = "cl")]
Changelog(ChangelogCommand),
/// Manage Git profiles (user info, SSH, GPG)
#[command(alias = "p")]
Profile(ProfileCommand),
/// Manage configuration settings
#[command(alias = "cfg")]
Config(ConfigCommand),
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
// Initialize logging
let log_level = match cli.verbose {
0 => "warn",
1 => "info",
2 => "debug",
_ => "trace",
};
tracing_subscriber::fmt()
.with_env_filter(log_level)
.with_target(false)
.init();
debug!("Starting quicommit v{}", env!("CARGO_PKG_VERSION"));
// Execute command
match cli.command {
Commands::Init(cmd) => cmd.execute().await,
Commands::Commit(cmd) => cmd.execute().await,
Commands::Tag(cmd) => cmd.execute().await,
Commands::Changelog(cmd) => cmd.execute().await,
Commands::Profile(cmd) => cmd.execute().await,
Commands::Config(cmd) => cmd.execute().await,
}
}