use std::sync::atomic::{AtomicBool, Ordering};
static CI: AtomicBool = AtomicBool::new(false);
pub fn set_ci(enabled: bool) {
CI.store(enabled, Ordering::Relaxed);
}
pub fn is_ci() -> bool {
CI.load(Ordering::Relaxed)
}
pub fn interactive_message(what: &str) -> String {
format!(
"{what} requires interactive input, but --ci (non-interactive) mode is on. \
Provide it via a flag, an environment variable, or .smb/config.toml — \
or run the command without --ci."
)
}
pub fn resolve(flag: bool) -> bool {
if flag {
return true;
}
match std::env::var("CI") {
Ok(value) => {
let value = value.trim().to_ascii_lowercase();
matches!(value.as_str(), "1" | "true" | "yes" | "on")
}
Err(_) => false,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn flag_forces_ci_without_touching_env() {
assert!(resolve(true));
}
#[test]
fn set_and_read_roundtrip() {
set_ci(true);
assert!(is_ci());
set_ci(false);
assert!(!is_ci());
}
}