reactive_graph/tooling/update/
mod.rs1use crate::tooling::update::args::UpdateArgs;
2use crate::tooling::update::commands::UpdateCommands;
3use crate::tooling::update::release_info::print_release_info;
4use crate::tooling::update::release_info::print_release_list;
5use crate::tooling::update::release_tag::ReleaseTag;
6use anyhow::Result;
7use self_update::Status;
8use self_update::backends::github::Update;
9use self_update::cargo_crate_version;
10use self_update::update::ReleaseUpdate;
11
12pub mod args;
13pub mod commands;
14pub mod release;
15pub mod release_tag;
16
17pub mod release_info;
18
19pub const REPO_OWNER: &str = "reactive-graph";
20pub const REPO_NAME: &str = "reactive-graph";
21pub const TARGET_TRIPLE: &str = env!("VERGEN_CARGO_TARGET_TRIPLE");
22
23pub fn handle_update(args: UpdateArgs) -> Result<()> {
24 if let Some(commands) = &args.commands {
25 return match commands {
26 UpdateCommands::Info(info_args) => print_release_info(&args, info_args),
27 UpdateCommands::List(list_args) => print_release_list(list_args),
28 };
29 };
30 let status = execute_update(&args)?;
31 println!("Successfully updated to version: {}", status.version());
32 Ok(())
33}
34
35fn execute_update(args: &UpdateArgs) -> Result<Status> {
36 update_from_github(args)?.update().map_err(Into::into)
37}
38
39fn update_from_github(args: &UpdateArgs) -> Result<Box<dyn ReleaseUpdate>> {
40 let current_bin_name = env!("CARGO_BIN_NAME");
41 let release_tag = ReleaseTag::from(args);
42 Update::configure()
43 .show_download_progress(args.show_download_progress())
44 .show_output(args.show_output())
45 .no_confirm(args.no_confirm())
46 .repo_owner(REPO_OWNER)
47 .repo_name(REPO_NAME)
48 .bin_path_in_archive(&release_tag.bin_path_in_archive(current_bin_name))
49 .bin_name(current_bin_name)
50 .current_version(cargo_crate_version!())
51 .target_version_tag(&release_tag.target_version_tag())
52 .build()
53 .map_err(Into::into)
54}