Skip to content

Commit

Permalink
xtask: new bump versions (#893)
Browse files Browse the repository at this point in the history
* new versions logic for use after we finish all crate refactors
  • Loading branch information
jondot committed Oct 23, 2024
1 parent d7addf6 commit ca0e01f
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 0 deletions.
9 changes: 9 additions & 0 deletions xtask/src/bin/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use clap::{
ArgAction::{SetFalse, SetTrue},
Parser, Subcommand,
};
use xtask::versions;

#[derive(Parser)]
#[command(author, version, about, long_about = None)]
Expand All @@ -29,6 +30,10 @@ enum Commands {
#[arg(short, long, action = SetFalse)]
exclude_starters: bool,
},
Bump {
#[arg(name = "VERSION")]
new_version: Version,
},
}

fn main() -> eyre::Result<()> {
Expand Down Expand Up @@ -69,6 +74,10 @@ fn main() -> eyre::Result<()> {
}
xtask::CmdExit::ok()
}
Commands::Bump { new_version } => {
versions::bump_version(&new_version.to_string());
xtask::CmdExit::ok()
}
};

res.exit();
Expand Down
1 change: 1 addition & 0 deletions xtask/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pub mod errors;
pub mod out;
pub mod prompt;
pub mod utils;
pub mod versions;

#[derive(Debug)]
pub struct CmdExit {
Expand Down
72 changes: 72 additions & 0 deletions xtask/src/versions.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
use std::path::Path;

use regex::Regex;

fn bump_version_in_file(
file_path: &str,
version_regex: &str,
replacement_version: &str,
once: bool,
) {
let path = Path::new(file_path);

// Read the content of the file
if path.exists() {
println!("bumping in {file_path}");
let file_content = std::fs::read_to_string(file_path).expect("read file");

// Apply regex replacement
let re = Regex::new(version_regex).expect("Invalid regex");
if !re.is_match(&file_content) {
println!("cannot match on {file_path}");
return;
}
let new_content = if once {
re.replace(&file_content, replacement_version)
} else {
re.replace_all(&file_content, replacement_version)
};

std::fs::write(path, new_content.to_string()).expect("write file");
}
}

pub fn bump_version(version: &str) {
for cargo in [
"starters/saas/Cargo.toml",
"starters/saas/migration/Cargo.toml",
] {
// turn starters to local
bump_version_in_file(
cargo,
// loco-rs = { version =".."
r#"loco-rs\s*=\s*\{\s*version\s*=\s*"[^"]+""#,
r#"loco-rs = { path="../../""#,
false,
);

// turn starters from local to version
bump_version_in_file(
cargo,
// loco-rs = { path =".."
r#"loco-rs\s*=\s*\{\s*path\s*=\s*"[^"]+?""#,
&format!(r#"loco-rs = {{ version = "{version}""#),
false,
);
}

// replace main versions
let version_replacement = format!(r#"version = "{version}""#);
bump_version_in_file("Cargo.toml", r"(?m)^version.*$", &version_replacement, true);

bump_version_in_file(
"loco-gen/Cargo.toml",
r"(?m)^version.*$",
&version_replacement,
true,
);

// sync new version to subcrates in main Cargo.toml
let loco_gen_dep = format!(r#"loco-gen = {{ version = "{version}","#);
bump_version_in_file("Cargo.toml", r"(?m)^loco-gen [^,]*,", &loco_gen_dep, false);
}

0 comments on commit ca0e01f

Please sign in to comment.