use anyhow::{Context, Result, bail};
use std::process::Command;
#[cfg(all(feature = "binary-release", unix))]
const UNIX_INSTALL_URL: &str =
"https://raw.githubusercontent.com/flipbit03/cuqueclicker/main/install.sh";
#[cfg(all(feature = "binary-release", windows))]
const WINDOWS_INSTALL_URL: &str =
"https://raw.githubusercontent.com/flipbit03/cuqueclicker/main/install.ps1";
#[cfg(feature = "binary-release")]
pub fn update() -> Result<()> {
println!("Updating via installer script...");
#[cfg(unix)]
let status = Command::new("sh")
.arg("-c")
.arg(format!("curl -fsSL {UNIX_INSTALL_URL} | sh"))
.status()
.context("failed to spawn sh")?;
#[cfg(windows)]
let status = Command::new("powershell")
.args(["-Command", &format!("irm {WINDOWS_INSTALL_URL} | iex")])
.status()
.context("failed to spawn powershell")?;
if !status.success() {
bail!("update installer exited with status {:?}", status.code());
}
Ok(())
}
#[cfg(not(feature = "binary-release"))]
pub fn update() -> Result<()> {
println!("Updating via `cargo install cuqueclicker --force`...");
let status = Command::new("cargo")
.args(["install", "cuqueclicker", "--force"])
.status()
.context("failed to spawn cargo (is it on your PATH?)")?;
if !status.success() {
bail!("cargo install exited with status {:?}", status.code());
}
Ok(())
}