adnv 1.5.0

CLI that tracks, checks and auto-updates infrastructure dependency versions across Terraform, Helm, Docker, Git and npm
Documentation
use crate::Result;
use crate::sources::{list, parse, resolve};

pub mod display;

#[derive(Default)]
pub struct Options<'a> {
    pub parse: parse::ParseOptions,
    pub list: list::ListOptions<'a>,
    pub resolve: resolve::ResolveOptions,
}

pub async fn run(options: Options<'_>) -> Result<()> {
    let results = resolve_sources(&options).await?;

    display::display_results(results.into());

    Ok(())
}

pub(crate) async fn resolve_sources(
    options: &Options<'_>,
) -> Result<
    Vec<
        std::result::Result<
            resolve::ResolvedSource,
            crate::error::ErrorWithData<crate::sources::VersionedSource>,
        >,
    >,
> {
    use itertools::Itertools;

    let (sources, errors) = parse::parse_cwd(&options.parse).await.split();
    parse::print_parsing_errors(errors);

    let sources = sources.iter().map(|source| async {
        let tags = list::list_tags(&source.source, &options.list)
            .await
            .map_err(|err| err.with_data(source.clone()))?;
        resolve::resolve_tags(source, &tags, &options.resolve)
    });
    let results: Vec<_> = futures::future::join_all(sources)
        .await
        .into_iter()
        .filter_map_ok(|source| source)
        .collect();

    Ok(results)
}