shine-cli 2.0.0

Give personal automation a reviewable lifecycle
Documentation
use anyhow::Result;
use std::path::PathBuf;

use crate::config::Config;
use crate::core_runtime;
use crate::env::EnvConfig;

pub(super) struct ScriptTemplate {
    pub(super) source_path: PathBuf,
    pub(super) rendered_path: PathBuf,
    pub(super) display_name: String,
    pub(super) transforms: Vec<String>,
}

#[derive(Default)]
pub(super) struct TemplateRenderReport {
    pub(super) updated: Vec<String>,
}

pub(super) async fn apply_template_to_scripts(
    config: &Config,
    script_pairs: &[ScriptTemplate],
) -> Result<TemplateRenderReport> {
    let mut runtime = core_runtime::from_config(config).await?;
    runtime.context_mut_for_cli().env = EnvConfig::load_or_init(config).await?.as_map().clone();
    let scripts = script_pairs
        .iter()
        .map(|script| shine_core::runtime::ShellScriptTemplate {
            source_path: script.source_path.clone(),
            rendered_path: script.rendered_path.clone(),
            display_name: script.display_name.clone(),
            transforms: script.transforms.clone(),
        })
        .collect::<Vec<_>>();
    let report = runtime.render_shell_templates(&scripts).await?;
    Ok(TemplateRenderReport {
        updated: report.updated,
    })
}