From f32cf34ab445242293f7138f3caa798e9e1504bf Mon Sep 17 00:00:00 2001 From: GeekMasher Date: Mon, 28 Apr 2025 21:05:40 +0100 Subject: [PATCH 1/2] feat: Update bumping support and add Sync --- src/cli.rs | 1 + src/defaults.yml | 2 ++ src/interactive.rs | 30 +++++++++++++++++++++++++++- src/main.rs | 49 +++++++++++++++++++++++++++++++--------------- src/workflows.rs | 27 ++++++++++++------------- 5 files changed, 77 insertions(+), 32 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index a3357a8..01482a3 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -53,6 +53,7 @@ pub enum ArgumentCommands { defaults: Option, }, Display, + Sync, Bump { /// Set Version #[clap(short, long, env, default_value = "")] diff --git a/src/defaults.yml b/src/defaults.yml index 9363952..b0ae287 100644 --- a/src/defaults.yml +++ b/src/defaults.yml @@ -115,7 +115,9 @@ locations: default: true paths: - "**/Dockerfile" + - "**/*.Dockerfile" - "**/Containerfile" + - "**/*.Containerfile" - "**/docker-compose.yml" ecosystems: - Docker diff --git a/src/interactive.rs b/src/interactive.rs index caba305..19f06a9 100644 --- a/src/interactive.rs +++ b/src/interactive.rs @@ -12,6 +12,7 @@ pub fn select_mode(config: &Config) -> Result { } modes.push("Display"); modes.push("Bump"); + modes.push("Sync"); let selection = FuzzySelect::with_theme(&ColorfulTheme::default()) .with_prompt("Select Mode") @@ -24,9 +25,28 @@ pub fn select_mode(config: &Config) -> Result { match *text { "Init" => Ok(interactive_init()?), "Display" => Ok(WorkflowMode::Display), + "Sync" => { + let version = if let Some(version) = &config.version { + semver::Version::parse(version.as_str())? + } else { + prompt_version()? + }; + Ok(WorkflowMode::Bump { + mode: BumpMode::Version(version.to_string()), + version, + }) + } "Bump" => { let bump_mode = select_bump_mode()?; - Ok(WorkflowMode::Bump(bump_mode)) + let version = if let Some(version) = &config.version { + semver::Version::parse(version)? + } else { + prompt_version()? + }; + Ok(WorkflowMode::Bump { + mode: bump_mode, + version, + }) } _ => Err(anyhow!("Invalid selection")), } @@ -135,6 +155,14 @@ pub fn select_bump_mode() -> Result { } } +fn prompt_version() -> Result { + let version = dialoguer::Input::::new() + .with_prompt("Enter Version") + .default("0.1.0".to_string()) + .interact()?; + semver::Version::parse(&version).map_err(|e| anyhow!("Invalid version: {}", e)) +} + fn find_project_name() -> Result { let current_dir = std::env::current_dir()?; let project_name = current_dir diff --git a/src/main.rs b/src/main.rs index 969205e..ad7543c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -57,6 +57,18 @@ async fn main() -> Result<()> { enable_defaults: *defaults, } } + Some(ArgumentCommands::Sync) => { + debug!("Sync Mode"); + let version = if let Some(version) = &config.version { + semver::Version::parse(version.as_str())? + } else { + semver::Version::parse("0.0.0")? + }; + WorkflowMode::Bump { + mode: BumpMode::Version(version.to_string()), + version, + } + } Some(ArgumentCommands::Bump { set_version, mode, @@ -66,15 +78,6 @@ async fn main() -> Result<()> { }) => { debug!("Bump Mode"); - let cli_mode = if *minor { - BumpMode::Minor - } else if *major { - BumpMode::Major - } else { - BumpMode::Patch - }; - debug!("CLI Mode: {:?}", cli_mode); - let bump_mode = if !set_version.is_empty() { debug!("Manually setting version: {}", set_version); BumpMode::Version(set_version.clone()) @@ -83,16 +86,30 @@ async fn main() -> Result<()> { BumpMode::from(mode) } else if let Some(ref version) = config.version { debug!("Setting mode: Version (from config)"); - // Update version from config file - let mut new_version = semver::Version::parse(version)?; - update_version(&mut new_version, &cli_mode); + BumpMode::Version(version.clone()) + } else { + if *minor { + BumpMode::Minor + } else if *major { + BumpMode::Major + } else { + BumpMode::Patch + } + }; + debug!("CLI Mode: {:?}", bump_mode); - BumpMode::Version(new_version.to_string()) + let version = if let Some(version) = &config.version { + let mut version = semver::Version::parse(version.as_str())?; + update_version(&mut version, &bump_mode); + version } else { - cli_mode + panic!("Version not set in config"); }; - WorkflowMode::Bump(bump_mode) + WorkflowMode::Bump { + mode: bump_mode, + version, + } } Some(ArgumentCommands::Display) => WorkflowMode::Display, None => select_mode(&config)?, @@ -139,7 +156,7 @@ async fn main() -> Result<()> { workflow.display()?; } - WorkflowMode::Bump(mode) => { + WorkflowMode::Bump { mode, .. } => { info!("Bumping version - {:?}", mode); workflow.patch().await?; } diff --git a/src/workflows.rs b/src/workflows.rs index 20a45d2..0a63320 100644 --- a/src/workflows.rs +++ b/src/workflows.rs @@ -14,7 +14,12 @@ pub enum WorkflowMode { language_ecosystems: Vec, enable_defaults: Option, }, - Bump(BumpMode), + Bump { + /// Bump Mode + mode: BumpMode, + /// Version to set + version: semver::Version, + }, Display, } @@ -37,11 +42,10 @@ impl Workflow { self.process(|path, captures| { for capture in captures { let data = capture.get(1).unwrap(); - let version = semver::Version::parse(data.as_str())?; let start = data.start(); let end = data.end(); - match self.mode { + match &self.mode { WorkflowMode::Display => { info!( "{:>8} :: {}#{}", @@ -50,14 +54,11 @@ impl Workflow { start ); } - WorkflowMode::Bump(ref mode) => { - let mut new_version = version.clone(); - update_version(&mut new_version, mode); - + WorkflowMode::Bump { version, .. } => { info!( "{:>8} -> {:<8} :: {}#{}-{}", style(data.as_str()).red(), - style(new_version).green(), + style(version).green(), path.display(), start, end @@ -78,24 +79,20 @@ impl Workflow { for capture in captures { let data = capture.get(1).unwrap(); - let version = semver::Version::parse(data.as_str())?; let start = data.start(); let end = data.end(); let location = format!("{}#{}-{}", path.display(), start, end); - if let WorkflowMode::Bump(ref mode) = self.mode { - let mut new_version = version.clone(); - update_version(&mut new_version, mode); - + if let WorkflowMode::Bump { version, .. } = &self.mode { info!( "{:>8} -> {:<8} :: {}", style(data.as_str()).red(), - style(new_version.clone()).green(), + style(version.clone()).green(), location ); - content.replace_range(start..end, new_version.to_string().as_str()); + content.replace_range(start..end, version.to_string().as_str()); }; } From 9f1b12cc10475338a73af3e5f7b67085c439b61c Mon Sep 17 00:00:00 2001 From: GeekMasher Date: Mon, 28 Apr 2025 21:09:02 +0100 Subject: [PATCH 2/2] fix: Update version check --- src/main.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index ad7543c..5bcc75b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ #![deny(unsafe_code)] use anyhow::Result; +use anyhow::anyhow; use console::style; use defaults::Defaults; use log::debug; @@ -103,7 +104,7 @@ async fn main() -> Result<()> { update_version(&mut version, &bump_mode); version } else { - panic!("Version not set in config"); + return Err(anyhow!("Version not found in config")); }; WorkflowMode::Bump {