From dc6a92e69685ff7013d26d601b7507749d315aef Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Thu, 23 Apr 2026 14:59:48 -0400 Subject: [PATCH] drop public settings load wrappers --- lib/crates/fabro-cli/src/commands/graph.rs | 5 +-- .../fabro-cli/src/commands/preflight.rs | 5 +-- .../fabro-cli/src/commands/run/create.rs | 5 +-- lib/crates/fabro-cli/src/commands/validate.rs | 5 +-- lib/crates/fabro-cli/src/manifest_builder.rs | 37 +++++++++++++------ lib/crates/fabro-config/src/lib.rs | 5 +-- lib/crates/fabro-config/src/load.rs | 37 ++----------------- 7 files changed, 38 insertions(+), 61 deletions(-) diff --git a/lib/crates/fabro-cli/src/commands/graph.rs b/lib/crates/fabro-cli/src/commands/graph.rs index b8416a6c3..cd8f9ee74 100644 --- a/lib/crates/fabro-cli/src/commands/graph.rs +++ b/lib/crates/fabro-cli/src/commands/graph.rs @@ -11,8 +11,7 @@ use std::io::Write; use anyhow::{Context, bail}; use fabro_api::types; -use fabro_config::load::load_settings_user; -use fabro_config::user::active_settings_path; +use fabro_config::user::{active_settings_path, load_settings_config}; use fabro_types::settings::SettingsLayer; use fabro_util::terminal::Styles; use tracing::debug; @@ -40,7 +39,7 @@ pub(crate) async fn run( args_layer: SettingsLayer::default(), args: None, run_id: None, - user_layer: load_settings_user()?, + user_layer: load_settings_config(None)?, user_settings_path: Some(active_settings_path(None)), })?; let client = ctx.server().await?; diff --git a/lib/crates/fabro-cli/src/commands/preflight.rs b/lib/crates/fabro-cli/src/commands/preflight.rs index 5f98e0179..9cebf4f8c 100644 --- a/lib/crates/fabro-cli/src/commands/preflight.rs +++ b/lib/crates/fabro-cli/src/commands/preflight.rs @@ -1,6 +1,5 @@ use anyhow::bail; -use fabro_config::load::load_settings_user; -use fabro_config::user::active_settings_path; +use fabro_config::user::{active_settings_path, load_settings_config}; use fabro_util::terminal::Styles; use crate::args::PreflightArgs; @@ -27,7 +26,7 @@ pub(crate) async fn execute( args_layer: preflight_args_layer(&args)?, args: preflight_manifest_args(&args), run_id: None, - user_layer: load_settings_user()?, + user_layer: load_settings_config(None)?, user_settings_path: Some(active_settings_path(None)), })?; let client = ctx.server().await?; diff --git a/lib/crates/fabro-cli/src/commands/run/create.rs b/lib/crates/fabro-cli/src/commands/run/create.rs index 9f1e5a105..a2de07329 100644 --- a/lib/crates/fabro-cli/src/commands/run/create.rs +++ b/lib/crates/fabro-cli/src/commands/run/create.rs @@ -1,5 +1,4 @@ -use fabro_config::load::load_settings_user; -use fabro_config::user::active_settings_path; +use fabro_config::user::{active_settings_path, load_settings_config}; use fabro_types::RunId; use fabro_util::terminal::Styles; @@ -42,7 +41,7 @@ pub(crate) async fn create_run( args_layer: cli_args_config, args: run_manifest_args(args), run_id, - user_layer: load_settings_user()?, + user_layer: load_settings_config(None)?, user_settings_path: Some(active_settings_path(None)), })?; let client = ctx.server().await?; diff --git a/lib/crates/fabro-cli/src/commands/validate.rs b/lib/crates/fabro-cli/src/commands/validate.rs index 162a980c7..f174b1b73 100644 --- a/lib/crates/fabro-cli/src/commands/validate.rs +++ b/lib/crates/fabro-cli/src/commands/validate.rs @@ -1,6 +1,5 @@ use anyhow::bail; -use fabro_config::load::load_settings_user; -use fabro_config::user::active_settings_path; +use fabro_config::user::{active_settings_path, load_settings_config}; use fabro_types::settings::SettingsLayer; use fabro_util::terminal::Styles; @@ -23,7 +22,7 @@ pub(crate) async fn run( args_layer: SettingsLayer::default(), args: None, run_id: None, - user_layer: load_settings_user()?, + user_layer: load_settings_config(None)?, user_settings_path: Some(active_settings_path(None)), })?; let client = ctx.server().await?; diff --git a/lib/crates/fabro-cli/src/manifest_builder.rs b/lib/crates/fabro-cli/src/manifest_builder.rs index 616c4516d..d001ed4e6 100644 --- a/lib/crates/fabro-cli/src/manifest_builder.rs +++ b/lib/crates/fabro-cli/src/manifest_builder.rs @@ -8,7 +8,6 @@ use std::path::{Component, Path, PathBuf}; use anyhow::{Context, Result, anyhow}; use fabro_api::types; -use fabro_config::load::load_settings_for_workflow; use fabro_config::parse_settings_layer; use fabro_config::project::{self, discover_project_config, resolve_workflow_path}; use fabro_config::run::resolve_run_goal; @@ -30,7 +29,7 @@ pub(crate) struct ManifestBuildInput { pub args: Option, pub run_id: Option, /// User-level settings layer. Production callers load via - /// `load_settings_user()`; tests pass `SettingsLayer::default()`. + /// `load_settings_config(None)`; tests pass `SettingsLayer::default()`. pub user_layer: SettingsLayer, /// Path to the user settings file (for inclusion in /// `RunManifest.configs`). `None` skips the user config entry. @@ -57,14 +56,35 @@ struct WorkflowScanInput { } pub(crate) fn build_run_manifest(input: ManifestBuildInput) -> Result { - let workflow_layer = load_settings_for_workflow(&input.workflow, &input.cwd)?; + let root_resolution = resolve_workflow_path(&input.workflow, &input.cwd)?; + if root_resolution.workflow_config.is_none() + && !root_resolution.resolved_workflow_path.is_file() + { + return Err(fabro_config::Error::WorkflowNotFound( + root_resolution.resolved_workflow_path.display().to_string(), + ) + .into()); + } + let workflow_parent = root_resolution + .resolved_workflow_path + .parent() + .unwrap_or_else(|| Path::new(".")); + let project_config = discover_project_config(workflow_parent)?; + let workflow_layer = root_resolution + .workflow_config + .clone() + .unwrap_or_default() + .combine( + project_config + .as_ref() + .map(|(_, config)| config.clone()) + .unwrap_or_default(), + ); let merged_settings = input .args_layer .clone() .combine(workflow_layer) .combine(input.user_layer); - - let root_resolution = resolve_workflow_path(&input.workflow, &input.cwd)?; let target_path = root_resolution.dot_path.clone(); let target_logical_path = to_logical_path(&target_path, &input.cwd)?; let target_logical_path_string = logical_path_string(&target_logical_path); @@ -83,12 +103,7 @@ pub(crate) fn build_run_manifest(input: ManifestBuildInput) -> Result Result { +pub(crate) fn load_settings_path(path: &Path) -> Result { let content = std::fs::read_to_string(path).map_err(|source| Error::read_file(path, source))?; let mut layer = parse_settings_layer(&content) .map_err(|err| Error::parse_file("Failed to parse settings file", path, err))?; @@ -20,37 +20,6 @@ pub fn load_settings_path(path: &Path) -> Result { Ok(layer) } -pub fn load_settings_for_workflow(path: &Path, cwd: &Path) -> Result { - let resolution = project::resolve_workflow_path(path, cwd)?; - if resolution.workflow_config.is_none() && !resolution.resolved_workflow_path.is_file() { - return Err(Error::WorkflowNotFound( - resolution.resolved_workflow_path.display().to_string(), - )); - } - - let workflow_config = resolution.workflow_config.unwrap_or_default(); - let project_config = project::discover_project_config( - resolution - .resolved_workflow_path - .parent() - .unwrap_or_else(|| Path::new(".")), - )? - .map(|(_, config)| config) - .unwrap_or_default(); - - Ok(workflow_config.combine(project_config)) -} - -pub fn load_settings_project(start: &Path) -> Result { - Ok(project::discover_project_config(start)? - .map(|(_, config)| config) - .unwrap_or_default()) -} - -pub fn load_settings_user() -> Result { - user::load_settings_config(None) -} - pub(crate) fn resolve_goal_file_paths(file: &mut SettingsLayer, base_dir: &Path) { let Some(run) = file.run.as_mut() else { return;