From eb6f1b2cde0e93fed2aaa48057cb5f8bde2a3a61 Mon Sep 17 00:00:00 2001 From: Michael Vlach Date: Wed, 13 Mar 2024 08:06:57 +0100 Subject: [PATCH] [ci] Openapi schema version is not updated on version update #1045 (#1053) update openapi schema during release --- agdb_ci/src/main.rs | 76 ++++++++++++------- .../project1/openapi/schema.json | 11 +++ .../project1/openapi/schema.json | 11 +++ 3 files changed, 69 insertions(+), 29 deletions(-) create mode 100644 agdb_ci/tests/test_data_before/project1/openapi/schema.json create mode 100644 agdb_ci/tests/test_data_expected/project1/openapi/schema.json diff --git a/agdb_ci/src/main.rs b/agdb_ci/src/main.rs index f87b0ba27..08edab28e 100644 --- a/agdb_ci/src/main.rs +++ b/agdb_ci/src/main.rs @@ -4,6 +4,7 @@ const RUST_RELEASE_PROJECTS: [&str; 4] = ["agdb", "agdb_derive", "agdb_api", "ag const AGDB_PROJECT: &str = "agdb"; const CARGO_TOML: &str = "Cargo.toml"; const PACKAGE_JSON: &str = "package.json"; +const OPENAPI_JSON: &str = "schema.json"; const IGNORE: [&str; 8] = [ "node_modules", "tests", @@ -24,8 +25,8 @@ struct CIError { #[derive(Default)] struct ProjectFiles { - cargo_tomls: Vec, - package_jsons: Vec, + tomls: Vec, + jsons: Vec, } impl From for CIError { @@ -62,9 +63,11 @@ fn project_files(path: &std::path::Path, files: &mut ProjectFiles) -> Result<(), && !IGNORE.contains(&dir.file_name().to_string_lossy().as_ref()) { if dir.path().join(CARGO_TOML).exists() { - files.cargo_tomls.push(dir.path().join(CARGO_TOML)); + files.tomls.push(dir.path().join(CARGO_TOML)); } else if dir.path().join(PACKAGE_JSON).exists() { - files.package_jsons.push(dir.path().join(PACKAGE_JSON)); + files.jsons.push(dir.path().join(PACKAGE_JSON)); + } else if dir.path().join(OPENAPI_JSON).exists() { + files.jsons.push(dir.path().join(OPENAPI_JSON)); } project_files(&dir.path(), files)?; @@ -74,15 +77,15 @@ fn project_files(path: &std::path::Path, files: &mut ProjectFiles) -> Result<(), Ok(()) } -fn update_cargo_projects( +fn update_tomls( current_version: &str, new_version: &str, - cargo_tomls: &[std::path::PathBuf], + tomls: &[std::path::PathBuf], ) -> Result<(), CIError> { - for cargo_toml in cargo_tomls { - println!("Updating... {:?}", cargo_toml); + for toml in tomls { + println!("Updating... {:?}", toml); - let mut content = std::fs::read_to_string(cargo_toml)?.replace( + let mut content = std::fs::read_to_string(toml)?.replace( &format!("\nversion = \"{current_version}\""), &format!("\nversion = \"{new_version}\""), ); @@ -99,44 +102,59 @@ fn update_cargo_projects( ); } - std::fs::write(cargo_toml, content)?; + std::fs::write(toml, content)?; } Ok(()) } -fn update_typescript_projects( +fn update_jsons( current_version: &str, new_version: &str, - package_jsons: &[std::path::PathBuf], + jsons: &[std::path::PathBuf], ) -> Result<(), CIError> { - for package_json in package_jsons { - println!("Updating... {:?}", package_json); + for json in jsons { + println!("Updating... {:?}", json); - let mut content = std::fs::read_to_string(package_json)?.replace( + let mut content = std::fs::read_to_string(json)?.replace( &format!("\"version\": \"{current_version}\""), &format!("\"version\": \"{new_version}\""), ); - for project in TYPESCRIPT_PROJECTS { + if json.ends_with("package.json") { content = content .replace( - &format!("\"{project}\": \"{current_version}\""), - &format!("\"{project}\": \"{new_version}\""), + &format!("\"version\": \"{current_version}\""), + &format!("\"version\": \"{new_version}\""), ) .replace( - &format!("\"{project}\": \"^{current_version}\""), - &format!("\"{project}\": \"^{new_version}\""), + &format!("\"version\": \"^{current_version}\""), + &format!("\"version\": \"^{new_version}\""), ); + + for project in TYPESCRIPT_PROJECTS { + content = content + .replace( + &format!("\"{project}\": \"{current_version}\""), + &format!("\"{project}\": \"{new_version}\""), + ) + .replace( + &format!("\"{project}\": \"^{current_version}\""), + &format!("\"{project}\": \"^{new_version}\""), + ); + } } - std::fs::write(package_json, content)?; - std::process::Command::new("bash") - .arg("-c") - .arg("npm install") - .current_dir(package_json.parent().expect("Parent directory not found")) - .spawn()? - .wait()?; + std::fs::write(json, content)?; + + if json.ends_with("package.json") { + std::process::Command::new("bash") + .arg("-c") + .arg("npm install") + .current_dir(json.parent().expect("Parent directory not found")) + .spawn()? + .wait()?; + } } Ok(()) } @@ -152,8 +170,8 @@ fn main() -> Result<(), CIError> { let mut files = ProjectFiles::default(); project_files(std::path::Path::new("."), &mut files)?; - update_cargo_projects(¤t_version, &new_version, &files.cargo_tomls)?; - update_typescript_projects(¤t_version, &new_version, &files.package_jsons)?; + update_tomls(¤t_version, &new_version, &files.tomls)?; + update_jsons(¤t_version, &new_version, &files.jsons)?; println!("DONE"); diff --git a/agdb_ci/tests/test_data_before/project1/openapi/schema.json b/agdb_ci/tests/test_data_before/project1/openapi/schema.json new file mode 100644 index 000000000..64006188a --- /dev/null +++ b/agdb_ci/tests/test_data_before/project1/openapi/schema.json @@ -0,0 +1,11 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "agdb_server", + "description": "Agnesoft Graph Database Server", + "license": { + "name": "Apache-2.0" + }, + "version": "0.2.0" + } +} diff --git a/agdb_ci/tests/test_data_expected/project1/openapi/schema.json b/agdb_ci/tests/test_data_expected/project1/openapi/schema.json new file mode 100644 index 000000000..416193b31 --- /dev/null +++ b/agdb_ci/tests/test_data_expected/project1/openapi/schema.json @@ -0,0 +1,11 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "agdb_server", + "description": "Agnesoft Graph Database Server", + "license": { + "name": "Apache-2.0" + }, + "version": "0.3.0" + } +}