Skip to content

Commit

Permalink
flowey: Avoid calling env::set_var (#513)
Browse files Browse the repository at this point in the history
Part of #288
  • Loading branch information
smalis-msft authored Dec 17, 2024
1 parent 3e50139 commit 0dffce5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 11 deletions.
17 changes: 10 additions & 7 deletions flowey/flowey_cli/src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,18 @@ pub fn cli_main<P: Subcommand + IntoPipeline>(
// This mechanism is in-place because some YAML pipeline defn langs (*cough*
// ADO *cough*) don't let you set pipeline-level env vars which are
// automatically inherited by all shell contexts.
let mut log_override = None;
if let Commands::VarDb(var_db::VarDb { job_idx, .. })
| Commands::ExecSnippet(exec_snippet::ExecSnippet { job_idx, .. }) = &cli.command
{
let _ = try_inject_flowey_log(*job_idx);
log_override = try_get_flowey_log(*job_idx).unwrap_or_default();
}

ci_logger::init("FLOWEY_LOG").unwrap();
if let Some(log_level) = log_override {
ci_logger::init_with_level(&log_level).unwrap();
} else {
ci_logger::init("FLOWEY_LOG").unwrap();
}

match cli.command {
Commands::Debug(cmd) => cmd.run(),
Expand Down Expand Up @@ -85,7 +90,7 @@ impl From<FlowBackendCli> for FlowBackend {
}
}

fn try_inject_flowey_log(job_idx: usize) -> anyhow::Result<()> {
fn try_get_flowey_log(job_idx: usize) -> anyhow::Result<Option<String>> {
// skip if the env var is already set
if std::env::var("FLOWEY_LOG").is_err() {
let log_level = var_db::open_var_db(job_idx)?
Expand All @@ -96,11 +101,9 @@ fn try_inject_flowey_log(job_idx: usize) -> anyhow::Result<()> {
});

if let Some(log_level) = log_level {
// Yes, this is a hack... but I kinda don't want to go update the
// ci_logger crate right now
std::env::set_var("FLOWEY_LOG", log_level)
return Ok(Some(log_level));
}
}

Ok(())
Ok(None)
}
16 changes: 12 additions & 4 deletions support/ci_logger/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ struct AdoLogger {
}

impl AdoLogger {
fn new(log_env_var: &str) -> AdoLogger {
fn new(log_level: Option<&str>) -> AdoLogger {
let mut builder = env_logger::filter::Builder::new();
if let Ok(var) = std::env::var(log_env_var) {
builder.parse(&var);
if let Some(log_level) = log_level {
builder.parse(log_level);
} else {
builder.filter_level(log::LevelFilter::Info);
}
Expand Down Expand Up @@ -80,6 +80,14 @@ impl log::Log for AdoLogger {

/// Initialize the ADO logger
pub fn init(log_env_var: &str) -> Result<(), log::SetLoggerError> {
log::set_boxed_logger(Box::new(AdoLogger::new(log_env_var)))
log::set_boxed_logger(Box::new(AdoLogger::new(
std::env::var(log_env_var).ok().as_deref(),
)))
.map(|()| log::set_max_level(log::LevelFilter::Trace))
}

/// Initialize the ADO logger with a specific value, instead of an env var.
pub fn init_with_level(log_level: &str) -> Result<(), log::SetLoggerError> {
log::set_boxed_logger(Box::new(AdoLogger::new(Some(log_level))))
.map(|()| log::set_max_level(log::LevelFilter::Trace))
}

0 comments on commit 0dffce5

Please sign in to comment.