diff --git a/crates/xtask/src/common/assets.rs b/crates/xtask/src/common/assets.rs index 241928dbf..22c2e0992 100644 --- a/crates/xtask/src/common/assets.rs +++ b/crates/xtask/src/common/assets.rs @@ -166,7 +166,14 @@ fn check_sha256(name: &str, asset: &Asset, mut file: std::fs::File) -> anyhow::R } } 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 } }) diff --git a/crates/xtask/src/common/workload.rs b/crates/xtask/src/common/workload.rs index 88ba651b2..61fa292c1 100644 --- a/crates/xtask/src/common/workload.rs +++ b/crates/xtask/src/common/workload.rs @@ -4,6 +4,7 @@ use crate::{bench::BenchWorkload, test::TestWorkload}; #[derive(Deserialize)] #[serde(tag = "type")] +#[serde(rename_all = "camelCase")] pub enum Workload { Bench(BenchWorkload), Test(TestWorkload), diff --git a/crates/xtask/src/test/mod.rs b/crates/xtask/src/test/mod.rs index 94bd88ecb..c6f009f01 100644 --- a/crates/xtask/src/test/mod.rs +++ b/crates/xtask/src/test/mod.rs @@ -2,7 +2,6 @@ use std::time::Duration; use crate::common::{args::CommonArgs, client::Client, logs::setup_logs, workload::Workload}; use anyhow::{bail, Context}; -use cargo_metadata::semver::Version; use clap::Parser; mod versions; @@ -16,8 +15,6 @@ pub struct TestDeriveArgs { /// Common arguments shared with other commands #[command(flatten)] common: CommonArgs, - - initial_version: Version, } 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 { Ok(_) => { - println!( - "✅ Workload {} from file {} completed successfully", - workload.name, - workload_file.display() - ); + println!("✅ Workload {} completed successfully", workload.name,); } Err(error) => { - println!( - "❌ Workload {} from file {} failed: {error}", - workload.name, - workload_file.display() - ); + println!("❌ Workload {} failed: {error}", workload.name,); return Err(error); } } diff --git a/crates/xtask/src/test/versions.rs b/crates/xtask/src/test/versions.rs index 78c7b135e..075ccf40d 100644 --- a/crates/xtask/src/test/versions.rs +++ b/crates/xtask/src/test/versions.rs @@ -6,10 +6,15 @@ use cargo_metadata::semver::Version; use serde::Deserialize; async fn get_sha256(version: &Version, asset_name: &str) -> anyhow::Result { + // 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, } #[derive(Deserialize)] @@ -19,14 +24,20 @@ async fn get_sha256(version: &Version, asset_name: &str) -> anyhow::Result, 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!( diff --git a/crates/xtask/src/test/workload.rs b/crates/xtask/src/test/workload.rs index b57994dea..528ff645f 100644 --- a/crates/xtask/src/test/workload.rs +++ b/crates/xtask/src/test/workload.rs @@ -48,8 +48,10 @@ enum CommandOrUpgradeVec { /// A test workload. /// Not to be confused with [a bench workload](crate::bench::workload::Workload). #[derive(Deserialize)] +#[serde(rename_all = "camelCase")] pub struct TestWorkload { pub name: String, + pub initial_version: Version, pub assets: BTreeMap, pub commands: Vec, } @@ -64,7 +66,7 @@ impl TestWorkload { // Group commands between upgrades let mut commands_or_upgrade = 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 { match command_or_upgrade { CommandOrUpgrade::Command(command) => current_commands.push(command.clone()), diff --git a/workloads/tests/movies.json b/workloads/tests/movies.json new file mode 100644 index 000000000..f437f7bd5 --- /dev/null +++ b/workloads/tests/movies.json @@ -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": [] +}