mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-23 21:26:26 +00:00
Fix asset version issues
This commit is contained in:
@ -6,10 +6,15 @@ use cargo_metadata::semver::Version;
|
||||
use serde::Deserialize;
|
||||
|
||||
async fn get_sha256(version: &Version, asset_name: &str) -> anyhow::Result<String> {
|
||||
// If version is lower than 1.15 there is no point in trying to get the sha256, GitHub didn't support it
|
||||
if *version < Version::parse("1.15.0")? {
|
||||
anyhow::bail!("version is lower than 1.15, sha256 not available");
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct GithubReleaseAsset {
|
||||
name: String,
|
||||
digest: String,
|
||||
digest: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
@ -19,14 +24,20 @@ async fn get_sha256(version: &Version, asset_name: &str) -> anyhow::Result<Strin
|
||||
|
||||
let url =
|
||||
format!("https://api.github.com/repos/meilisearch/meilisearch/releases/tags/v{version}");
|
||||
let data: GithubRelease = reqwest::get(url).await?.json().await?;
|
||||
let client = reqwest::Client::builder()
|
||||
.user_agent("Meilisearch bench xtask")
|
||||
.build()
|
||||
.context("failed to build reqwest client")?;
|
||||
let body = client.get(url).send().await?.text().await?;
|
||||
let data: GithubRelease = serde_json::from_str(&body)?;
|
||||
|
||||
let digest = data
|
||||
.assets
|
||||
.into_iter()
|
||||
.find(|asset| asset.name.as_str() == asset_name)
|
||||
.with_context(|| format!("asset {asset_name} not found in release v{version}"))?
|
||||
.digest;
|
||||
.digest
|
||||
.with_context(|| format!("asset {asset_name} has no digest"))?;
|
||||
|
||||
let sha256 =
|
||||
digest.strip_prefix("sha256:").map(|s| s.to_string()).context("invalid sha256 format")?;
|
||||
@ -79,12 +90,19 @@ async fn add_asset(assets: &mut BTreeMap<String, Asset>, version: &Version) -> a
|
||||
let filename = format!("meilisearch-{arch}");
|
||||
|
||||
// Try to get the sha256 but it may fail if Github is rate limiting us
|
||||
let sha256 = match get_sha256(version, &filename).await {
|
||||
Ok(sha256) => Some(sha256),
|
||||
Err(err) => {
|
||||
eprintln!("⚠️ Warning: could not get sha256 from GitHub: {err}. Proceeding without integrity check.");
|
||||
None
|
||||
// We hardcode some values to speed up tests and avoid hitting Github
|
||||
// Also, versions prior to 1.15 don't have sha256 available anyway
|
||||
let sha256 = match local_filename.as_str() {
|
||||
"meilisearch-1.12.0-macos-apple-silicon" => {
|
||||
Some(String::from("3b384707a5df9edf66f9157f0ddb70dcd3ac84d4887149169cf93067d06717b7"))
|
||||
}
|
||||
_ => match get_sha256(version, &filename).await {
|
||||
Ok(sha256) => Some(sha256),
|
||||
Err(err) => {
|
||||
tracing::warn!("failed to get sha256 for version {version}: {err}");
|
||||
None
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
let url = format!(
|
||||
|
Reference in New Issue
Block a user