use std::io::IsTerminal;
const OPT_OUT_ENV: &str = "ARISTO_NO_UPDATE_NOTIFIER";
pub fn maybe_notify() {
if !enabled() {
return;
}
if let Some(msg) = aristo_core::update_check::check(env!("CARGO_PKG_VERSION")) {
eprintln!("{msg}");
}
}
fn enabled() -> bool {
enabled_with(
std::env::var_os(OPT_OUT_ENV).is_some(),
std::env::var_os("CI").is_some(),
std::io::stderr().is_terminal(),
)
}
fn enabled_with(opt_out: bool, ci: bool, stderr_is_terminal: bool) -> bool {
!opt_out && !ci && stderr_is_terminal
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn notifies_on_interactive_terminal_without_optout_or_ci() {
assert!(enabled_with(false, false, true));
}
#[test]
fn suppressed_when_stderr_not_a_terminal() {
assert!(!enabled_with(false, false, false));
}
#[test]
fn suppressed_in_ci_even_on_a_terminal() {
assert!(!enabled_with(false, true, true));
}
#[test]
fn suppressed_when_opted_out() {
assert!(!enabled_with(true, false, true));
}
}