| @@ -1372,7 +1372,7 @@ dependencies = [ | |||
| "path_abs", | |||
| "plist", | |||
| "regex", | |||
| "semver", | |||
| "semver 1.0.23", | |||
| "serde", | |||
| "serde_yaml 0.9.34+deprecated", | |||
| "shell-words", | |||
| @@ -1693,7 +1693,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" | |||
| dependencies = [ | |||
| "camino", | |||
| "cargo-platform", | |||
| "semver", | |||
| "semver 1.0.23", | |||
| "serde", | |||
| "serde_json", | |||
| ] | |||
| @@ -1706,7 +1706,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" | |||
| dependencies = [ | |||
| "camino", | |||
| "cargo-platform", | |||
| "semver", | |||
| "semver 1.0.23", | |||
| "serde", | |||
| "serde_json", | |||
| "thiserror 1.0.66", | |||
| @@ -2615,6 +2615,7 @@ dependencies = [ | |||
| "log", | |||
| "notify 5.2.0", | |||
| "pyo3", | |||
| "self_update", | |||
| "serde", | |||
| "serde_json", | |||
| "serde_yaml 0.9.34+deprecated", | |||
| @@ -2755,7 +2756,7 @@ dependencies = [ | |||
| "log", | |||
| "once_cell", | |||
| "schemars", | |||
| "semver", | |||
| "semver 1.0.23", | |||
| "serde", | |||
| "serde-with-expand-env", | |||
| "serde_yaml 0.9.34+deprecated", | |||
| @@ -4823,6 +4824,18 @@ dependencies = [ | |||
| "serde", | |||
| ] | |||
| [[package]] | |||
| name = "indicatif" | |||
| version = "0.15.0" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4" | |||
| dependencies = [ | |||
| "console", | |||
| "lazy_static", | |||
| "number_prefix", | |||
| "regex", | |||
| ] | |||
| [[package]] | |||
| name = "indoc" | |||
| version = "2.0.5" | |||
| @@ -6240,6 +6253,12 @@ dependencies = [ | |||
| "libc", | |||
| ] | |||
| [[package]] | |||
| name = "number_prefix" | |||
| version = "0.3.0" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a" | |||
| [[package]] | |||
| name = "nvml-wrapper" | |||
| version = "0.10.0" | |||
| @@ -7634,6 +7653,15 @@ dependencies = [ | |||
| "serde", | |||
| ] | |||
| [[package]] | |||
| name = "quick-xml" | |||
| version = "0.20.0" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "26aab6b48e2590e4a64d1ed808749ba06257882b461d01ca71baeb747074a6dd" | |||
| dependencies = [ | |||
| "memchr", | |||
| ] | |||
| [[package]] | |||
| name = "quick-xml" | |||
| version = "0.30.0" | |||
| @@ -9961,7 +9989,7 @@ version = "0.4.1" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" | |||
| dependencies = [ | |||
| "semver", | |||
| "semver 1.0.23", | |||
| ] | |||
| [[package]] | |||
| @@ -10346,6 +10374,32 @@ dependencies = [ | |||
| "libc", | |||
| ] | |||
| [[package]] | |||
| name = "self_update" | |||
| version = "0.27.0" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "6fb85f1802f7b987237b8525c0fde86ea86f31c957c1875467c727d5b921179c" | |||
| dependencies = [ | |||
| "hyper 0.14.30", | |||
| "indicatif", | |||
| "log", | |||
| "quick-xml 0.20.0", | |||
| "regex", | |||
| "reqwest 0.11.27", | |||
| "semver 0.11.0", | |||
| "serde_json", | |||
| "tempfile", | |||
| ] | |||
| [[package]] | |||
| name = "semver" | |||
| version = "0.11.0" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" | |||
| dependencies = [ | |||
| "semver-parser", | |||
| ] | |||
| [[package]] | |||
| name = "semver" | |||
| version = "1.0.23" | |||
| @@ -10355,6 +10409,15 @@ dependencies = [ | |||
| "serde", | |||
| ] | |||
| [[package]] | |||
| name = "semver-parser" | |||
| version = "0.10.3" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" | |||
| dependencies = [ | |||
| "pest", | |||
| ] | |||
| [[package]] | |||
| name = "seq-macro" | |||
| version = "0.3.5" | |||
| @@ -50,6 +50,12 @@ tabwriter = "1.4.0" | |||
| log = { version = "0.4.21", features = ["serde"] } | |||
| colored = "2.1.0" | |||
| env_logger = "0.11.3" | |||
| self_update = { version = "0.27.0", features = [ | |||
| "rustls", | |||
| "archive-zip", | |||
| "archive-tar", | |||
| "compression-flate2", | |||
| ], default-features = false } | |||
| pyo3 = { workspace = true, features = [ | |||
| "extension-module", | |||
| "abi3", | |||
| @@ -0,0 +1,6 @@ | |||
| fn main() { | |||
| println!( | |||
| "cargo:rustc-env=TARGET={}", | |||
| std::env::var("TARGET").unwrap() | |||
| ); | |||
| } | |||
| @@ -240,6 +240,20 @@ enum Command { | |||
| #[clap(long)] | |||
| quiet: bool, | |||
| }, | |||
| Self_ { | |||
| #[clap(subcommand)] | |||
| command: SelfSubCommand, | |||
| }, | |||
| } | |||
| #[derive(Debug, clap::Subcommand)] | |||
| enum SelfSubCommand { | |||
| Update { | |||
| /// Only check for updates without installing | |||
| #[clap(long)] | |||
| check_only: bool, | |||
| }, | |||
| } | |||
| #[derive(Debug, clap::Args)] | |||
| @@ -538,6 +552,61 @@ fn run(args: Args) -> eyre::Result<()> { | |||
| .context("failed to run dora-daemon")? | |||
| } | |||
| Command::Runtime => dora_runtime::main().context("Failed to run dora-runtime")?, | |||
| Command::Self_ { command } => match command { | |||
| SelfSubCommand::Update { check_only } => { | |||
| println!("Checking for updates..."); | |||
| #[cfg(target_os = "linux")] | |||
| let bin_path_in_archive = format!("dora-cli-{}/dora", env!("TARGET")); | |||
| #[cfg(target_os = "macos")] | |||
| let bin_path_in_archive = format!("dora-cli-{}/dora", env!("TARGET")); | |||
| #[cfg(target_os = "windows")] | |||
| let bin_path_in_archive = String::from("dora.exe"); | |||
| let status = self_update::backends::github::Update::configure() | |||
| .repo_owner("dora-rs") | |||
| .repo_name("dora") | |||
| .bin_path_in_archive(&bin_path_in_archive) | |||
| .bin_name("dora") | |||
| .show_download_progress(true) | |||
| .current_version(env!("CARGO_PKG_VERSION")) | |||
| .build()?; | |||
| if check_only { | |||
| // Only check if an update is available | |||
| match status.get_latest_release() { | |||
| Ok(release) => { | |||
| let current_version = self_update::cargo_crate_version!(); | |||
| if current_version != release.version { | |||
| println!( | |||
| "An update is available: {}. Run 'dora self update' to update", | |||
| release.version | |||
| ); | |||
| } else { | |||
| println!( | |||
| "Dora CLI is already at the latest version: {}", | |||
| current_version | |||
| ); | |||
| } | |||
| } | |||
| Err(e) => println!("Failed to check for updates: {}", e), | |||
| } | |||
| } else { | |||
| // Perform the actual update | |||
| match status.update() { | |||
| Ok(update_status) => match update_status { | |||
| self_update::Status::UpToDate(version) => { | |||
| println!("Dora CLI is already at the latest version: {}", version); | |||
| } | |||
| self_update::Status::Updated(version) => { | |||
| println!("Successfully updated Dora CLI to version: {}", version); | |||
| } | |||
| }, | |||
| Err(e) => println!("Failed to update: {}", e), | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| }; | |||
| Ok(()) | |||