reactive_graph_tooling/tooling/releases/
release_info.rs1use crate::shared::output_format::RenderTable;
2use crate::tooling::releases::args::ReleaseArgs;
3use crate::tooling::releases::args::ReleaseInfoArgs;
4use crate::tooling::releases::args::ReleaseListArgs;
5use crate::tooling::releases::release::Release;
6use crate::tooling::releases::release_tag::RELEASE_TAG_NIGHTLY;
7use crate::tooling::releases::release_tag::ReleaseTag;
8use crate::tooling::releases::update_from_github::update_from_github;
9use crate::tooling::repository::Repository;
10use crate::tooling::repository::args::RepositoryArgs;
11use anyhow::Result;
12use self_update::cargo_crate_version;
13
14pub fn print_release_info(
15 repository_args: &RepositoryArgs,
16 default_repository: &Box<dyn Repository>,
17 release_args: &ReleaseArgs,
18 release_info_args: &ReleaseInfoArgs,
19) -> Result<()> {
20 let release_update = update_from_github(repository_args, default_repository, release_args)?;
21 let release_info = match ReleaseTag::from(release_args) {
22 ReleaseTag::Nightly => release_update.get_release_version(RELEASE_TAG_NIGHTLY),
23 ReleaseTag::Latest => release_update.get_latest_release(),
24 ReleaseTag::Current => release_update.get_release_version(cargo_crate_version!()),
25 ReleaseTag::Version(version) => release_update.get_release_version(&version),
26 }?;
27 vec![Release::from(&release_info)].print_table_and_exit(&release_info_args.output_format)
28}
29
30pub fn print_release_list(repository_args: &RepositoryArgs, default_repository: &Box<dyn Repository>, release_list_args: &ReleaseListArgs) -> Result<()> {
31 self_update::backends::github::ReleaseList::configure()
32 .repo_owner(&repository_args.repository_owner(default_repository))
33 .repo_name(&repository_args.repository_name(default_repository))
34 .build()?
35 .fetch()?
36 .iter()
37 .map(Release::from)
38 .collect::<Vec<Release>>()
39 .print_table_and_exit(&release_list_args.output_format);
40}