reactive_graph_tooling/tooling/releases/
update_from_github.rs1use 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}