devrig 0.30.1

Local development orchestrator
Documentation
use anyhow::{bail, Result};
use std::path::Path;

use crate::orchestrator::state::ProjectState;

pub fn run(config_path: Option<&Path>, docker_name: &str) -> Result<()> {
    let config_path = match config_path {
        Some(p) => p.to_path_buf(),
        None => crate::config::resolve::resolve_config(None)?,
    };

    let project_dir = config_path.parent().unwrap_or(Path::new("."));
    let state_dir = ProjectState::state_dir_for(project_dir);

    let mut state = ProjectState::load(&state_dir).ok_or_else(|| {
        anyhow::anyhow!("no project state found -- has the project been started?")
    })?;

    if !state.reset_init(docker_name) {
        bail!(
            "docker '{}' not found in state (available: {:?})",
            docker_name,
            state.docker.keys().collect::<Vec<_>>()
        );
    }

    state.save(&state_dir)?;
    println!(
        "Reset init flag for '{}'. Init scripts will run on next start.",
        docker_name
    );

    Ok(())
}