use crate::github;
use crate::lockfile::PlatformInfo;
use eyre::Result;
const RUBYINSTALLER_REPO: &str = "oneclick/rubyinstaller2";
pub fn is_mri_version(version: &str) -> bool {
version.chars().next().is_some_and(|c| c.is_ascii_digit())
}
pub fn rubyinstaller_tag(version: &str) -> String {
format!("RubyInstaller-{version}-1")
}
pub fn rubyinstaller_asset_name(version: &str) -> String {
format!("rubyinstaller-{version}-1-x64.7z")
}
pub fn rubyinstaller_url(version: &str) -> String {
let tag = rubyinstaller_tag(version);
let asset = rubyinstaller_asset_name(version);
format!("https://github.com/{RUBYINSTALLER_REPO}/releases/download/{tag}/{asset}")
}
pub async fn resolve_rubyinstaller_lock_info(version: &str) -> Result<PlatformInfo> {
if !is_mri_version(version) {
return Ok(PlatformInfo::default());
}
let tag = rubyinstaller_tag(version);
let asset_name = rubyinstaller_asset_name(version);
if let Ok(release) = github::get_release(RUBYINSTALLER_REPO, &tag).await
&& let Some(asset) = release.assets.iter().find(|a| a.name == asset_name)
{
return Ok(PlatformInfo {
url: Some(asset.browser_download_url.clone()),
checksum: asset.digest.clone(),
size: None,
url_api: None,
conda_deps: None,
..Default::default()
});
}
Ok(PlatformInfo {
url: Some(rubyinstaller_url(version)),
checksum: None,
size: None,
url_api: None,
conda_deps: None,
..Default::default()
})
}