Skip to main content

alpine_protocol_sdk/
self_check.rs

1use std::env;
2use std::sync::OnceLock;
3
4use tracing::{info, warn};
5
6use crate::environment::detect_environment_issues;
7
8static SELF_CHECK_RUN: OnceLock<()> = OnceLock::new();
9
10pub fn run_sdk_self_check() {
11    if SELF_CHECK_RUN.set(()).is_err() {
12        return;
13    }
14
15    let mut ok = true;
16    if env::var("ALPINE_ATTESTERS_URL").is_ok() {
17        info!("[ALPINE][SELF-CHECK] attesters URL configured");
18    } else {
19        warn!("[ALPINE][SELF-CHECK][WARN] ALPINE_ATTESTERS_URL missing");
20        ok = false;
21    }
22
23    if env::var("ALPINE_ROOT_PUBKEY_B64").is_ok() {
24        info!("[ALPINE][SELF-CHECK] root pubkey configured");
25    } else {
26        warn!("[ALPINE][SELF-CHECK][WARN] ALPINE_ROOT_PUBKEY_B64 missing");
27        ok = false;
28    }
29
30    let issues = detect_environment_issues();
31    if issues.is_empty() {
32        info!("[ALPINE][SELF-CHECK] environment looks supported");
33    } else {
34        let labels = issues
35            .iter()
36            .map(|issue| issue.label())
37            .collect::<Vec<_>>()
38            .join(", ");
39        warn!(
40            "[ALPINE][SELF-CHECK][WARN] environment issues detected: {}",
41            labels
42        );
43        ok = false;
44    }
45
46    if ok {
47        info!("[ALPINE][SELF-CHECK] ready");
48    } else {
49        warn!("[ALPINE][SELF-CHECK][WARN] readiness checks failed");
50    }
51}