use std::env;
use std::path::PathBuf;
use std::process::Command;
fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=iris-language-1.0.0.vsix");
println!("cargo:rerun-if-changed=npm-iris-engine/scripts/install-universal.js");
if env::var("CI").is_ok() || env::var("CONTINUOUS_INTEGRATION").is_ok() {
println!("cargo:warning=CI environment detected. Skipping editor support install.");
return;
}
let universal_script = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap_or_default())
.join("npm-iris-engine")
.join("scripts")
.join("install-universal.js");
if universal_script.exists() {
let node_cmd = if cfg!(target_os = "windows") { "node.exe" } else { "node" };
let result = Command::new(node_cmd)
.arg(&universal_script)
.output();
match result {
Ok(output) => {
if !output.status.success() {
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
for line in stdout.lines() {
println!("cargo:warning={}", line);
}
for line in stderr.lines() {
println!("cargo:warning={}", line);
}
println!("cargo:warning=⚠️ Universal installer exited with non-zero status.");
}
}
Err(e) => {
println!("cargo:warning=❌ Could not run Node.js universal installer: {}", e);
println!("cargo:warning= Falling back to legacy VSCode-only install...");
fallback_vscode_install();
}
}
} else {
println!("cargo:warning=Universal installer script not found at {:?}. Skipping.", universal_script);
}
}
fn fallback_vscode_install() {
let code_cmd = if cfg!(target_os = "windows") { "code.cmd" } else { "code" };
let vscode_check = Command::new(code_cmd).arg("--version").output();
if vscode_check.is_err() {
println!("cargo:warning=VSCode not found. Skipping.");
return;
}
let vsix_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap_or_default())
.join("iris-language-1.0.0.vsix");
if !vsix_path.exists() {
println!("cargo:warning=VSCode extension .vsix not found. Skipping.");
return;
}
let result = Command::new(code_cmd)
.arg("--install-extension")
.arg(&vsix_path)
.arg("--force")
.output();
match result {
Ok(output) if output.status.success() => {
println!("cargo:warning=✅ VSCode extension installed.");
}
Ok(output) => {
println!("cargo:warning=❌ VSCode install failed: {}", String::from_utf8_lossy(&output.stderr));
}
Err(e) => {
println!("cargo:warning=❌ Error: {}", e);
}
}
}