reactive_graph/tooling/releases/
update_from_github.rs

1use crate::tooling::releases::args::ReleaseArgs;
2use crate::tooling::releases::release_tag::ReleaseTag;
3use crate::tooling::repository::Repository;
4use crate::tooling::repository::args::RepositoryArgs;
5use self_update::backends::github::Update;
6use self_update::cargo_crate_version;
7use self_update::update::ReleaseUpdate;
8
9pub fn update_from_github(
10    repository_args: &RepositoryArgs,
11    default_repository: &Box<dyn Repository>,
12    release_args: &ReleaseArgs,
13) -> anyhow::Result<Box<dyn ReleaseUpdate>> {
14    let current_bin_name = env!("CARGO_BIN_NAME");
15    let release_tag = ReleaseTag::from(release_args);
16    Update::configure()
17        .show_download_progress(release_args.show_download_progress())
18        .show_output(release_args.show_output())
19        .no_confirm(release_args.no_confirm())
20        .repo_owner(&repository_args.repository_owner(&default_repository))
21        .repo_name(&repository_args.repository_name(&default_repository))
22        .bin_path_in_archive(&release_tag.bin_path_in_archive(current_bin_name))
23        .bin_name(current_bin_name)
24        .current_version(cargo_crate_version!())
25        .target_version_tag(&release_tag.target_version_tag())
26        .build()
27        .map_err(Into::into)
28}