mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-23 16:21:33 +11:00
Attempt at modifying the cargo tomls with the correct version
This commit is contained in:
parent
9af8b19859
commit
2158091752
7
tools/Cargo.lock
generated
7
tools/Cargo.lock
generated
|
@ -69,6 +69,12 @@ version = "1.8.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.12.3"
|
||||
|
@ -152,6 +158,7 @@ name = "tools"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"glob",
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
|
|
|
@ -8,3 +8,4 @@ edition = "2021"
|
|||
[dependencies]
|
||||
clap = "4"
|
||||
toml_edit = "0.14"
|
||||
glob = "0.3"
|
|
@ -41,23 +41,106 @@ pub fn release(matches: &clap::ArgMatches) -> Result<(), Error> {
|
|||
return Ok(());
|
||||
}
|
||||
|
||||
let project_toml_files = glob_many(&root_directory, &["agb-*/Cargo.toml"])?;
|
||||
|
||||
update_to_version(
|
||||
&root_directory,
|
||||
&root_directory.join("agb/Cargo.toml"),
|
||||
version,
|
||||
)?;
|
||||
|
||||
for toml_file in project_toml_files {
|
||||
update_to_version(&root_directory, &toml_file, version)?;
|
||||
}
|
||||
|
||||
Command::new("just")
|
||||
.arg("ci")
|
||||
.spawn()
|
||||
.map_err(|_| Error::JustCiFailed)?;
|
||||
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn update_to_version(
|
||||
root_directory: &Path,
|
||||
toml_file: &Path,
|
||||
new_version: &Version,
|
||||
) -> Result<(), Error> {
|
||||
let directory_name = toml_file.parent().unwrap();
|
||||
let project_name = directory_name.to_string_lossy().replace('-', "_");
|
||||
|
||||
let toml_file_content = std::fs::read_to_string(toml_file).map_err(|_| Error::ReadTomlFile)?;
|
||||
let mut cargo_toml = toml_file_content
|
||||
.parse::<toml_edit::Document>()
|
||||
.map_err(|_| Error::InvalidToml)?;
|
||||
|
||||
let new_version = format!("{new_version}");
|
||||
cargo_toml["package"]["version"] = toml_edit::value(&new_version);
|
||||
|
||||
std::fs::write(toml_file, cargo_toml.to_string()).map_err(|_| Error::WriteTomlFile)?;
|
||||
|
||||
for cargo_toml_file in glob_many(
|
||||
root_directory,
|
||||
&[
|
||||
"agb-*/Cargo.toml",
|
||||
"agb/Cargo.toml",
|
||||
"examples/*/Cargo.toml",
|
||||
"book/games/*/Cargo.toml",
|
||||
"template/Cargo.toml",
|
||||
],
|
||||
)? {
|
||||
let toml_file_content =
|
||||
std::fs::read_to_string(&cargo_toml_file).map_err(|_| Error::ReadTomlFile)?;
|
||||
let mut cargo_toml = toml_file_content
|
||||
.parse::<toml_edit::Document>()
|
||||
.map_err(|_| Error::InvalidToml)?;
|
||||
|
||||
if let Some(this_dep) = cargo_toml["dependencies"].get_mut(&project_name) {
|
||||
match this_dep {
|
||||
toml_edit::Item::Value(value) => *value = new_version.clone().into(),
|
||||
toml_edit::Item::Table(t) => t["version"] = toml_edit::value(&new_version),
|
||||
_ => return Err(Error::InvalidToml),
|
||||
}
|
||||
}
|
||||
|
||||
std::fs::write(cargo_toml_file, cargo_toml.to_string())
|
||||
.map_err(|_| Error::WriteTomlFile)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn execute_git_command(root_directory: &Path, args: &[&str]) -> Result<String, Error> {
|
||||
let git_cmd = Command::new("git")
|
||||
.args(args)
|
||||
.current_dir(root_directory)
|
||||
.output()
|
||||
.map_err(|_| Error::GitError("Failed to run command"))?;
|
||||
.map_err(|_| Error::Git("Failed to run command"))?;
|
||||
|
||||
String::from_utf8(git_cmd.stdout).map_err(|_| Error::GitError("Output not utf-8"))
|
||||
String::from_utf8(git_cmd.stdout).map_err(|_| Error::Git("Output not utf-8"))
|
||||
}
|
||||
|
||||
fn glob_many(root_directory: &Path, globs: &[&str]) -> Result<Vec<std::path::PathBuf>, Error> {
|
||||
let mut result = vec![];
|
||||
|
||||
for g in globs.iter() {
|
||||
for path in glob::glob(&root_directory.join(g).to_string_lossy()).expect("Invalid glob") {
|
||||
result.push(path.map_err(|_| Error::Glob)?);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
FindRootDirectory,
|
||||
GitError(&'static str),
|
||||
Git(&'static str),
|
||||
Glob,
|
||||
ReadTomlFile,
|
||||
InvalidToml,
|
||||
WriteTomlFile,
|
||||
JustCiFailed,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
|
|
Loading…
Reference in a new issue