tracel-xtask-cli 1.1.1

CLI entrypoint for Tracel xtask
const SUBREPO_EMOJIS: &[(&str, &str)] = &[
    ("admin", "⚙️"),
    ("api", "🔌"),
    ("app", "📱"),
    ("backend", "🧠"),
    ("cd", "🚀"),
    ("ci", "🤖"),
    ("console", "🖥️"),
    ("data", "🗄️"),
    ("db", "🗄️"),
    ("dev", "👨‍💻"),
    ("frontend", "🖥️"),
    ("infra", "🏗️"),
    ("ops", "🧰"),
    ("monitor", "🚨"),
    ("platform", "🏗️"),
    ("plugin", "🧩"),
    ("server", "🛰️"),
    ("tool", "🛠️"),
    ("ui", "🎨"),
    ("web", "🌐"),
];

pub fn emoji_for_subrepo(name: &str) -> Option<&'static str> {
    let n = name.to_ascii_lowercase();
    for (needle, emoji) in SUBREPO_EMOJIS {
        if n.starts_with(needle) {
            return Some(*emoji);
        }
    }

    None
}

pub fn format_repo_label(name: &str) -> String {
    match emoji_for_subrepo(name) {
        Some(e) => format!("{e} {name}"),
        None => name.to_string(),
    }
}

pub fn print_run_header(label: &str) {
    let width = 78;
    let header = label.to_string();
    let sep = "".repeat(width);
    eprintln!("{sep}");
    eprintln!(" {header}");
    eprintln!("{sep}");
}