use anyhow::Result;
use cnctd_xcode::XcodeProject;
use colored::Colorize;
use std::env::current_dir;
fn discover_project() -> Result<XcodeProject> {
let cwd = current_dir()?;
let base_path = cwd.to_string_lossy();
XcodeProject::discover(&base_path)
}
pub async fn show_version() -> Result<()> {
let project = discover_project()?;
let version = project.get_version()?;
let build = project.get_build_number()?;
println!(
"{} {} ({})",
"Version:".blue(),
version.green(),
build.yellow()
);
println!(
" {} {}",
"Project:".dimmed(),
project.project_path.display()
);
println!(" {} {}", "Scheme:".dimmed(), project.scheme);
Ok(())
}
pub async fn bump(part: &str) -> Result<()> {
let project = discover_project()?;
match part {
"build" => {
let old = project.get_build_number()?;
let new = project.bump_build_number()?;
println!(
"{} build number: {} -> {}",
"Bumped".green(),
old.yellow(),
new.green()
);
}
"major" | "minor" | "patch" => {
let old_version = project.get_version()?;
let new_version = project.bump_version(part)?;
println!(
"{} version: {} -> {}",
"Bumped".green(),
old_version.yellow(),
new_version.green()
);
}
_ => {
return Err(anyhow::anyhow!(
"Invalid bump target '{}'. Use: build, major, minor, or patch",
part
));
}
}
Ok(())
}