use cli_forge::{define_tag, out, parse, style, tag};
fn main() {
define_tag("ok", style("").green().bold());
define_tag("warn", style("").yellow().bold());
define_tag("fail", style("").red().bold());
define_tag("muted", style("").rgb(136, 136, 136));
out(style("deploy: staging").bold().underline());
out("");
step("resolve dependencies", Status::Ok);
step("compile (release)", Status::Ok);
step("run test suite", Status::Warn);
step("upload artifacts", Status::Ok);
step("smoke test", Status::Fail);
out("");
parse("<b>result</b>: <c=red>1 step failed</c> — see <c=#3b82f6><u>logs/smoke.txt</u></c>");
out(tag("muted").render_with("finished in 48.2s"));
}
enum Status {
Ok,
Warn,
Fail,
}
fn step(label: &str, status: Status) {
let name = match status {
Status::Ok => "ok",
Status::Warn => "warn",
Status::Fail => "fail",
};
let marker = tag(name).render_with(&format!("{:<6}", format!("[{name}]")));
out(format!(" {marker} {label}"));
}