mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-23 13:16:27 +00:00
Fix asset version issues
This commit is contained in:
@ -166,7 +166,14 @@ fn check_sha256(name: &str, asset: &Asset, mut file: std::fs::File) -> anyhow::R
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
tracing::warn!(sha256 = file_hash, "Skipping hash for asset {name} that doesn't have one. Please add it to workload file");
|
let msg = match name.starts_with("meilisearch-v") {
|
||||||
|
true => "Please add it to xtask/src/test/versions.rs",
|
||||||
|
false => "Please add it to workload file",
|
||||||
|
};
|
||||||
|
tracing::warn!(
|
||||||
|
sha256 = file_hash,
|
||||||
|
"Skipping hash for asset {name} that doesn't have one. {msg}"
|
||||||
|
);
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -4,6 +4,7 @@ use crate::{bench::BenchWorkload, test::TestWorkload};
|
|||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub enum Workload {
|
pub enum Workload {
|
||||||
Bench(BenchWorkload),
|
Bench(BenchWorkload),
|
||||||
Test(TestWorkload),
|
Test(TestWorkload),
|
||||||
|
@ -2,7 +2,6 @@ use std::time::Duration;
|
|||||||
|
|
||||||
use crate::common::{args::CommonArgs, client::Client, logs::setup_logs, workload::Workload};
|
use crate::common::{args::CommonArgs, client::Client, logs::setup_logs, workload::Workload};
|
||||||
use anyhow::{bail, Context};
|
use anyhow::{bail, Context};
|
||||||
use cargo_metadata::semver::Version;
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
|
||||||
mod versions;
|
mod versions;
|
||||||
@ -16,8 +15,6 @@ pub struct TestDeriveArgs {
|
|||||||
/// Common arguments shared with other commands
|
/// Common arguments shared with other commands
|
||||||
#[command(flatten)]
|
#[command(flatten)]
|
||||||
common: CommonArgs,
|
common: CommonArgs,
|
||||||
|
|
||||||
initial_version: Version,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(args: TestDeriveArgs) -> anyhow::Result<()> {
|
pub fn run(args: TestDeriveArgs) -> anyhow::Result<()> {
|
||||||
@ -58,18 +55,10 @@ async fn run_inner(args: TestDeriveArgs) -> anyhow::Result<()> {
|
|||||||
|
|
||||||
match workload.run(&args, &assets_client, &meili_client).await {
|
match workload.run(&args, &assets_client, &meili_client).await {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
println!(
|
println!("✅ Workload {} completed successfully", workload.name,);
|
||||||
"✅ Workload {} from file {} completed successfully",
|
|
||||||
workload.name,
|
|
||||||
workload_file.display()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
Err(error) => {
|
Err(error) => {
|
||||||
println!(
|
println!("❌ Workload {} failed: {error}", workload.name,);
|
||||||
"❌ Workload {} from file {} failed: {error}",
|
|
||||||
workload.name,
|
|
||||||
workload_file.display()
|
|
||||||
);
|
|
||||||
return Err(error);
|
return Err(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,15 @@ use cargo_metadata::semver::Version;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
async fn get_sha256(version: &Version, asset_name: &str) -> anyhow::Result<String> {
|
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)]
|
#[derive(Deserialize)]
|
||||||
struct GithubReleaseAsset {
|
struct GithubReleaseAsset {
|
||||||
name: String,
|
name: String,
|
||||||
digest: String,
|
digest: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@ -19,14 +24,20 @@ async fn get_sha256(version: &Version, asset_name: &str) -> anyhow::Result<Strin
|
|||||||
|
|
||||||
let url =
|
let url =
|
||||||
format!("https://api.github.com/repos/meilisearch/meilisearch/releases/tags/v{version}");
|
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
|
let digest = data
|
||||||
.assets
|
.assets
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.find(|asset| asset.name.as_str() == asset_name)
|
.find(|asset| asset.name.as_str() == asset_name)
|
||||||
.with_context(|| format!("asset {asset_name} not found in release v{version}"))?
|
.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 =
|
let sha256 =
|
||||||
digest.strip_prefix("sha256:").map(|s| s.to_string()).context("invalid sha256 format")?;
|
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}");
|
let filename = format!("meilisearch-{arch}");
|
||||||
|
|
||||||
// Try to get the sha256 but it may fail if Github is rate limiting us
|
// Try to get the sha256 but it may fail if Github is rate limiting us
|
||||||
let sha256 = match get_sha256(version, &filename).await {
|
// We hardcode some values to speed up tests and avoid hitting Github
|
||||||
Ok(sha256) => Some(sha256),
|
// Also, versions prior to 1.15 don't have sha256 available anyway
|
||||||
Err(err) => {
|
let sha256 = match local_filename.as_str() {
|
||||||
eprintln!("⚠️ Warning: could not get sha256 from GitHub: {err}. Proceeding without integrity check.");
|
"meilisearch-1.12.0-macos-apple-silicon" => {
|
||||||
None
|
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!(
|
let url = format!(
|
||||||
|
@ -48,8 +48,10 @@ enum CommandOrUpgradeVec {
|
|||||||
/// A test workload.
|
/// A test workload.
|
||||||
/// Not to be confused with [a bench workload](crate::bench::workload::Workload).
|
/// Not to be confused with [a bench workload](crate::bench::workload::Workload).
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct TestWorkload {
|
pub struct TestWorkload {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
pub initial_version: Version,
|
||||||
pub assets: BTreeMap<String, Asset>,
|
pub assets: BTreeMap<String, Asset>,
|
||||||
pub commands: Vec<CommandOrUpgrade>,
|
pub commands: Vec<CommandOrUpgrade>,
|
||||||
}
|
}
|
||||||
@ -64,7 +66,7 @@ impl TestWorkload {
|
|||||||
// Group commands between upgrades
|
// Group commands between upgrades
|
||||||
let mut commands_or_upgrade = Vec::new();
|
let mut commands_or_upgrade = Vec::new();
|
||||||
let mut current_commands = Vec::new();
|
let mut current_commands = Vec::new();
|
||||||
let mut all_versions = vec![args.initial_version.clone()];
|
let mut all_versions = vec![self.initial_version.clone()];
|
||||||
for command_or_upgrade in &self.commands {
|
for command_or_upgrade in &self.commands {
|
||||||
match command_or_upgrade {
|
match command_or_upgrade {
|
||||||
CommandOrUpgrade::Command(command) => current_commands.push(command.clone()),
|
CommandOrUpgrade::Command(command) => current_commands.push(command.clone()),
|
||||||
|
13
workloads/tests/movies.json
Normal file
13
workloads/tests/movies.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"name": "movies",
|
||||||
|
"type": "test",
|
||||||
|
"initialVersion": "1.12.0",
|
||||||
|
"assets": {
|
||||||
|
"movies.json": {
|
||||||
|
"local_location": null,
|
||||||
|
"remote_location": "https://milli-benchmarks.fra1.digitaloceanspaces.com/bench/datasets/movies.json",
|
||||||
|
"sha256": "5b6e4cb660bc20327776e8a33ea197b43d9ec84856710ead1cc87ab24df77de1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commands": []
|
||||||
|
}
|
Reference in New Issue
Block a user