Fixed build on cloud

This commit is contained in:
2025-04-06 14:46:42 +00:00
parent ea93adc4c8
commit 192ade72ee
3 changed files with 61 additions and 11 deletions

View File

@@ -1,15 +1,63 @@
pub fn main() {
println!("pwd: {}", std::env::current_dir().unwrap().display());
println!("cargo:rerun-if-changed=../../action_schema.xsd");
let output = std::process::Command::new("xml_schema_generator.exe")
.arg("--derive")
.arg("Clone, Debug, Deserialize, Serialize")
.arg("../../action_schema.xsd")
.arg("src/schema.rs")
.output()
.expect("Failed to execute xml_schema_generator");
if !output.status.success() {
panic!("xml_schema_generator failed: {}",
String::from_utf8_lossy(&output.stderr));
// Find xml_schema_generator in the path or in cargo bin directory
let cargo_home = std::env::var("CARGO_HOME").unwrap_or_else(|_| {
if cfg!(windows) {
format!("{}/.cargo", std::env::var("USERPROFILE").unwrap())
} else {
format!("{}/.cargo", std::env::var("HOME").unwrap())
}
});
let bin_dir = format!("{}/bin", cargo_home);
let paths = vec![bin_dir];
// Find the executable
let executable_name = if cfg!(windows) {
"xml_schema_generator.exe"
} else {
"xml_schema_generator"
};
let executable_path = paths.iter()
.map(|p| format!("{}/{}", p, executable_name))
.find(|p| std::path::Path::new(p).exists());
// If the executable isn't in any of the checked paths, try to install it
let executable = match executable_path {
Some(path) => path,
None => {
println!("cargo:warning=xml_schema_generator not found, trying to install it");
// Install xml_schema_generator using cargo install
let status = std::process::Command::new("cargo")
.args(["install", "xml_schema_generator"])
.status()
.expect("Failed to run cargo install");
if !status.success() {
panic!("Failed to install xml_schema_generator");
}
// Now it should be in the cargo bin directory
format!("{}/bin/{}", cargo_home, executable_name)
}
};
println!("cargo:warning=Using xml_schema_generator at: {}", executable);
// Run the generator
let output = std::process::Command::new(&executable)
.arg("--derive")
.arg("Clone, Debug, Deserialize, Serialize")
.arg("../../action_schema.xsd")
.arg("src/schema.rs")
.output()
.expect(&format!("Failed to execute {}", executable));
if !output.status.success() {
panic!("xml_schema_generator failed: {}",
String::from_utf8_lossy(&output.stderr));
}
}