From 0e102311a3c06930c5b64b67604baa9e8bc9af64 Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Fri, 8 May 2026 19:26:18 -0500 Subject: [PATCH 1/2] fix(bashkit-eval): make rustls provider init idempotent --- crates/bashkit-eval/src/provider/mod.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/bashkit-eval/src/provider/mod.rs b/crates/bashkit-eval/src/provider/mod.rs index 50a029fd..df026fb3 100644 --- a/crates/bashkit-eval/src/provider/mod.rs +++ b/crates/bashkit-eval/src/provider/mod.rs @@ -19,9 +19,11 @@ pub fn ensure_rustls_crypto_provider() -> anyhow::Result<()> { static INSTALL_RESULT: OnceLock> = OnceLock::new(); let install_result = INSTALL_RESULT.get_or_init(|| { - rustls::crypto::ring::default_provider() - .install_default() - .map_err(|_| anyhow::anyhow!("failed to install rustls ring crypto provider")) + match rustls::crypto::ring::default_provider().install_default() { + Ok(()) => Ok(()), + Err(_) if rustls::crypto::CryptoProvider::get_default().is_some() => Ok(()), + Err(_) => Err(anyhow::anyhow!("failed to install rustls ring crypto provider")), + } }); install_result @@ -30,6 +32,18 @@ pub fn ensure_rustls_crypto_provider() -> anyhow::Result<()> { .map_err(|e| anyhow::anyhow!("rustls crypto provider unavailable: {e}")) } +#[cfg(test)] +mod tests { + use super::ensure_rustls_crypto_provider; + + #[test] + fn ensure_rustls_provider_succeeds_when_already_installed() { + let _ = rustls::crypto::ring::default_provider().install_default(); + let result = ensure_rustls_crypto_provider(); + assert!(result.is_ok()); + } +} + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "snake_case")] pub enum Role { From 71d4fcdd33fcc2a99c258832706ef9a6e802ff9c Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Sat, 9 May 2026 09:18:52 +0000 Subject: [PATCH 2/2] chore(bashkit-eval): apply rustfmt to provider rebase --- crates/bashkit-eval/src/provider/mod.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/bashkit-eval/src/provider/mod.rs b/crates/bashkit-eval/src/provider/mod.rs index df026fb3..94ca0c7e 100644 --- a/crates/bashkit-eval/src/provider/mod.rs +++ b/crates/bashkit-eval/src/provider/mod.rs @@ -18,13 +18,16 @@ pub use openai_responses::OpenAiResponsesProvider; pub fn ensure_rustls_crypto_provider() -> anyhow::Result<()> { static INSTALL_RESULT: OnceLock> = OnceLock::new(); - let install_result = INSTALL_RESULT.get_or_init(|| { - match rustls::crypto::ring::default_provider().install_default() { - Ok(()) => Ok(()), - Err(_) if rustls::crypto::CryptoProvider::get_default().is_some() => Ok(()), - Err(_) => Err(anyhow::anyhow!("failed to install rustls ring crypto provider")), - } - }); + let install_result = + INSTALL_RESULT.get_or_init(|| { + match rustls::crypto::ring::default_provider().install_default() { + Ok(()) => Ok(()), + Err(_) if rustls::crypto::CryptoProvider::get_default().is_some() => Ok(()), + Err(_) => Err(anyhow::anyhow!( + "failed to install rustls ring crypto provider" + )), + } + }); install_result .as_ref()