reactive_graph_tooling/tooling/update/
mod.rs

1use 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}