use std::env;
use std::sync::OnceLock;
use tracing::{info, warn};
use crate::environment::detect_environment_issues;
static SELF_CHECK_RUN: OnceLock<()> = OnceLock::new();
pub fn run_sdk_self_check() {
if SELF_CHECK_RUN.set(()).is_err() {
return;
}
let mut ok = true;
if env::var("ALPINE_ATTESTERS_URL").is_ok() {
info!("[ALPINE][SELF-CHECK] attesters URL configured");
} else {
warn!("[ALPINE][SELF-CHECK][WARN] ALPINE_ATTESTERS_URL missing");
ok = false;
}
if env::var("ALPINE_ROOT_PUBKEY_B64").is_ok() {
info!("[ALPINE][SELF-CHECK] root pubkey configured");
} else {
warn!("[ALPINE][SELF-CHECK][WARN] ALPINE_ROOT_PUBKEY_B64 missing");
ok = false;
}
let issues = detect_environment_issues();
if issues.is_empty() {
info!("[ALPINE][SELF-CHECK] environment looks supported");
} else {
let labels = issues
.iter()
.map(|issue| issue.label())
.collect::<Vec<_>>()
.join(", ");
warn!(
"[ALPINE][SELF-CHECK][WARN] environment issues detected: {}",
labels
);
ok = false;
}
if ok {
info!("[ALPINE][SELF-CHECK] ready");
} else {
warn!("[ALPINE][SELF-CHECK][WARN] readiness checks failed");
}
}