mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-10 03:30:59 +00:00
refactor(settings): make fabro settings --local truly client-side
`--local` is supposed to render the settings that apply to the local CLI / client side, so it has no business resolving server settings. Drop the server section and the warning path, return only project/workflow/run/ cli/features. Removes the boundary violation that was about to break the CI boundary check, and restores the legacy_*_silently_ignored tests to their original silent assertion. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7cb6c65d58
commit
ff6538b77c
2 changed files with 29 additions and 35 deletions
|
|
@ -12,10 +12,10 @@ use std::path::Path;
|
|||
|
||||
use fabro_config::effective_settings::{EffectiveSettingsLayers, EffectiveSettingsMode};
|
||||
use fabro_config::{load_settings_project, project};
|
||||
use fabro_types::settings::Settings;
|
||||
use fabro_types::settings::cli::{CliLayer, OutputFormat};
|
||||
use fabro_types::settings::{CliSettings, SettingsLayer};
|
||||
use fabro_util::printer::Printer;
|
||||
use serde_json::json;
|
||||
|
||||
use crate::args::SettingsArgs;
|
||||
use crate::command_context::CommandContext;
|
||||
|
|
@ -96,7 +96,7 @@ fn local_settings_value(
|
|||
None,
|
||||
EffectiveSettingsMode::LocalOnly,
|
||||
)?;
|
||||
let mut value = serde_json::to_value(resolve_local_settings(&local_settings, printer)?)?;
|
||||
let mut value = resolve_local_settings_value(&local_settings)?;
|
||||
strip_nulls(&mut value);
|
||||
Ok(value)
|
||||
}
|
||||
|
|
@ -112,36 +112,24 @@ fn render_resolve_errors(errors: Vec<fabro_config::ResolveError>) -> anyhow::Err
|
|||
)
|
||||
}
|
||||
|
||||
fn resolve_local_settings(file: &SettingsLayer, printer: Printer) -> anyhow::Result<Settings> {
|
||||
fn resolve_local_settings_value(file: &SettingsLayer) -> anyhow::Result<serde_json::Value> {
|
||||
let file = fabro_config::apply_builtin_defaults(file.clone());
|
||||
|
||||
let project = fabro_config::resolve_project_from_file(&file).map_err(render_resolve_errors)?;
|
||||
let workflow = fabro_config::resolve_workflow_from_file(&file).map_err(render_resolve_errors)?;
|
||||
let workflow =
|
||||
fabro_config::resolve_workflow_from_file(&file).map_err(render_resolve_errors)?;
|
||||
let run = fabro_config::resolve_run_from_file(&file).map_err(render_resolve_errors)?;
|
||||
let cli = fabro_config::resolve_cli_from_file(&file).map_err(render_resolve_errors)?;
|
||||
let features = fabro_config::resolve_features_from_file(&file).map_err(render_resolve_errors)?;
|
||||
let features =
|
||||
fabro_config::resolve_features_from_file(&file).map_err(render_resolve_errors)?;
|
||||
|
||||
let server = match fabro_config::resolve_server_from_file(&file) {
|
||||
Ok(server) => server,
|
||||
Err(errors) => {
|
||||
for error in &errors {
|
||||
fabro_util::printerr!(printer, "warning: server config: {error}");
|
||||
}
|
||||
|
||||
let server_layer = file.server.clone().unwrap_or_default();
|
||||
let mut ignored = Vec::new();
|
||||
fabro_config::resolve_server(&server_layer, &mut ignored)
|
||||
}
|
||||
};
|
||||
|
||||
Ok(Settings {
|
||||
project,
|
||||
workflow,
|
||||
run,
|
||||
cli,
|
||||
server,
|
||||
features,
|
||||
})
|
||||
Ok(json!({
|
||||
"project": project,
|
||||
"workflow": workflow,
|
||||
"run": run,
|
||||
"cli": cli,
|
||||
"features": features,
|
||||
}))
|
||||
}
|
||||
|
||||
async fn rendered_config(
|
||||
|
|
|
|||
|
|
@ -682,9 +682,11 @@ name = "legacy-model"
|
|||
.assert()
|
||||
.success();
|
||||
|
||||
let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
|
||||
assert!(stderr.contains("warning: server config:"));
|
||||
assert!(stderr.contains("server.auth.methods"));
|
||||
assert!(
|
||||
assert.get_output().stderr.is_empty(),
|
||||
"settings should not warn about legacy config files: {}",
|
||||
String::from_utf8_lossy(&assert.get_output().stderr)
|
||||
);
|
||||
|
||||
let cfg = parse_settings(&assert.get_output().stdout);
|
||||
assert_eq!(cfg["cli"]["output"]["verbosity"].as_str(), Some("normal"));
|
||||
|
|
@ -719,9 +721,11 @@ name = "legacy-model"
|
|||
.assert()
|
||||
.success();
|
||||
|
||||
let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
|
||||
assert!(stderr.contains("warning: server config:"));
|
||||
assert!(stderr.contains("server.auth.methods"));
|
||||
assert!(
|
||||
assert.get_output().stderr.is_empty(),
|
||||
"settings should not warn about legacy config files: {}",
|
||||
String::from_utf8_lossy(&assert.get_output().stderr)
|
||||
);
|
||||
|
||||
let cfg = parse_settings(&assert.get_output().stdout);
|
||||
assert_eq!(cfg["cli"]["output"]["verbosity"].as_str(), Some("normal"));
|
||||
|
|
@ -756,9 +760,11 @@ name = "legacy-model"
|
|||
.assert()
|
||||
.success();
|
||||
|
||||
let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
|
||||
assert!(stderr.contains("warning: server config:"));
|
||||
assert!(stderr.contains("server.auth.methods"));
|
||||
assert!(
|
||||
assert.get_output().stderr.is_empty(),
|
||||
"settings should not warn about legacy config files: {}",
|
||||
String::from_utf8_lossy(&assert.get_output().stderr)
|
||||
);
|
||||
|
||||
let cfg = parse_settings(&assert.get_output().stdout);
|
||||
assert_eq!(cfg["cli"]["output"]["verbosity"].as_str(), Some("normal"));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue