pub mod commands;
use reqwest::Client;
pub const RUSTUP_TOOLCHAIN_NAME: &str = "succinct";
pub const LATEST_SUPPORTED_TOOLCHAIN_VERSION_TAG: &str = "succinct-1.93.0-64bit";
pub const SP1_VERSION_MESSAGE: &str =
concat!("sp1", " (", env!("VERGEN_GIT_SHA"), " ", env!("VERGEN_BUILD_TIMESTAMP"), ")");
pub async fn url_exists(client: &Client, url: &str) -> bool {
let res = client.head(url).send().await;
res.is_ok()
}
#[allow(unreachable_code)]
pub fn is_supported_target() -> bool {
#[cfg(all(target_arch = "x86_64", target_os = "linux"))]
return true;
#[cfg(all(target_arch = "aarch64", target_os = "linux"))]
return true;
#[cfg(all(target_arch = "x86_64", target_os = "macos"))]
return true;
#[cfg(all(target_arch = "aarch64", target_os = "macos"))]
return true;
false
}
pub fn get_target() -> String {
let mut target: target_lexicon::Triple = target_lexicon::HOST;
if target.environment == target_lexicon::Environment::Musl {
target.environment = target_lexicon::Environment::Gnu;
}
target.to_string()
}
#[allow(clippy::uninlined_format_args)]
pub async fn get_toolchain_download_url(client: &Client, target: String) -> String {
let all_releases = client
.get("https://api.github.com/repos/succinctlabs/rust/releases")
.send()
.await
.unwrap()
.json::<serde_json::Value>()
.await
.unwrap();
let _ = all_releases
.as_array()
.expect("Failed to fetch releases list")
.iter()
.find(|release| {
release["tag_name"].as_str().unwrap() == LATEST_SUPPORTED_TOOLCHAIN_VERSION_TAG
})
.unwrap_or_else(|| {
panic!(
"No release found for the expected tag: {LATEST_SUPPORTED_TOOLCHAIN_VERSION_TAG}",
);
});
let url = format!(
"https://github.com/succinctlabs/rust/releases/download/{LATEST_SUPPORTED_TOOLCHAIN_VERSION_TAG}/rust-toolchain-{target}.tar.gz"
);
url
}