From d9177d4727b4f1ce7ff240db982bad2837d09be8 Mon Sep 17 00:00:00 2001 From: Mubelotix Date: Mon, 25 Aug 2025 11:23:46 +0200 Subject: [PATCH] Create the test xtask command and args --- crates/xtask/src/bench/mod.rs | 34 ++++++++++-------------------- crates/xtask/src/bench/workload.rs | 17 +++++++++------ crates/xtask/src/common/args.rs | 24 +++++++++++++++++++++ crates/xtask/src/common/mod.rs | 1 + crates/xtask/src/lib.rs | 2 ++ crates/xtask/src/main.rs | 4 +++- crates/xtask/src/test/mod.rs | 11 ++++++++++ 7 files changed, 63 insertions(+), 30 deletions(-) create mode 100644 crates/xtask/src/common/args.rs create mode 100644 crates/xtask/src/common/mod.rs create mode 100644 crates/xtask/src/test/mod.rs diff --git a/crates/xtask/src/bench/mod.rs b/crates/xtask/src/bench/mod.rs index 1416c21d9..71f28f81f 100644 --- a/crates/xtask/src/bench/mod.rs +++ b/crates/xtask/src/bench/mod.rs @@ -6,6 +6,7 @@ mod env_info; mod meili_process; mod workload; +use crate::common::args::CommonArgs; use std::io::LineWriter; use std::path::PathBuf; @@ -25,14 +26,6 @@ pub fn default_report_folder() -> String { "./bench/reports/".into() } -pub fn default_asset_folder() -> String { - "./bench/assets/".into() -} - -pub fn default_log_filter() -> String { - "info".into() -} - pub fn default_dashboard_url() -> String { "http://localhost:9001".into() } @@ -40,6 +33,10 @@ pub fn default_dashboard_url() -> String { /// Run benchmarks from a workload #[derive(Parser, Debug)] pub struct BenchDeriveArgs { + /// Common arguments shared with other commands + #[command(flatten)] + common: CommonArgs, + /// Filename of the workload file, pass multiple filenames /// to run multiple workloads in the specified order. /// @@ -59,14 +56,6 @@ pub struct BenchDeriveArgs { #[arg(long, default_value_t = default_report_folder())] report_folder: String, - /// Directory to store the remote assets. - #[arg(long, default_value_t = default_asset_folder())] - asset_folder: String, - - /// Log directives - #[arg(short, long, default_value_t = default_log_filter())] - log_filter: String, - /// Benchmark dashboard API key #[arg(long)] api_key: Option, @@ -75,10 +64,6 @@ pub struct BenchDeriveArgs { #[arg(long)] master_key: Option, - /// Authentication bearer for fetching assets - #[arg(long)] - assets_key: Option, - /// Reason for the benchmark invocation #[arg(short, long)] reason: Option, @@ -97,7 +82,7 @@ pub struct BenchDeriveArgs { pub fn run(args: BenchDeriveArgs) -> anyhow::Result<()> { // setup logs let filter: tracing_subscriber::filter::Targets = - args.log_filter.parse().context("invalid --log-filter")?; + args.common.log_filter.parse().context("invalid --log-filter")?; let subscriber = tracing_subscriber::registry().with( tracing_subscriber::fmt::layer() @@ -116,8 +101,11 @@ pub fn run(args: BenchDeriveArgs) -> anyhow::Result<()> { let _scope = rt.enter(); // setup clients - let assets_client = - Client::new(None, args.assets_key.as_deref(), Some(std::time::Duration::from_secs(3600)))?; // 1h + let assets_client = Client::new( + None, + args.common.assets_key.as_deref(), + Some(std::time::Duration::from_secs(3600)), + )?; // 1h let dashboard_client = if args.no_dashboard { dashboard::DashboardClient::new_dry() diff --git a/crates/xtask/src/bench/workload.rs b/crates/xtask/src/bench/workload.rs index 39119428f..a80e4a273 100644 --- a/crates/xtask/src/bench/workload.rs +++ b/crates/xtask/src/bench/workload.rs @@ -47,7 +47,7 @@ async fn run_commands( .as_slice() .split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait)) { - super::command::run_batch(meili_client, batch, &workload.assets, &args.asset_folder) + super::command::run_batch(meili_client, batch, &workload.assets, &args.common.asset_folder) .await?; } @@ -64,7 +64,7 @@ async fn run_commands( .as_slice() .split_inclusive(|command| !matches!(command.synchronous, SyncMode::DontWait)) { - super::command::run_batch(meili_client, batch, &workload.assets, &args.asset_folder) + super::command::run_batch(meili_client, batch, &workload.assets, &args.common.asset_folder) .await?; } @@ -88,7 +88,7 @@ pub async fn execute( args: &BenchDeriveArgs, binary_path: Option<&Path>, ) -> anyhow::Result<()> { - assets::fetch_assets(assets_client, &workload.assets, &args.asset_folder).await?; + assets::fetch_assets(assets_client, &workload.assets, &args.common.asset_folder).await?; let workload_uuid = dashboard_client.create_workload(invocation_uuid, &workload).await?; @@ -156,9 +156,14 @@ async fn execute_run( } }; - let meilisearch = - meili_process::start(meili_client, master_key, workload, &args.asset_folder, run_command) - .await?; + let meilisearch = meili_process::start( + meili_client, + master_key, + workload, + &args.common.asset_folder, + run_command, + ) + .await?; let processor = run_commands( dashboard_client, diff --git a/crates/xtask/src/common/args.rs b/crates/xtask/src/common/args.rs new file mode 100644 index 000000000..2df9ce287 --- /dev/null +++ b/crates/xtask/src/common/args.rs @@ -0,0 +1,24 @@ +use clap::Parser; + +pub fn default_asset_folder() -> String { + "./bench/assets/".into() +} + +pub fn default_log_filter() -> String { + "info".into() +} + +#[derive(Parser, Debug, Clone)] +pub struct CommonArgs { + /// Directory to store the remote assets. + #[arg(long, default_value_t = default_asset_folder())] + pub asset_folder: String, + + /// Log directives + #[arg(short, long, default_value_t = default_log_filter())] + pub log_filter: String, + + /// Authentication bearer for fetching assets + #[arg(long)] + pub assets_key: Option, +} diff --git a/crates/xtask/src/common/mod.rs b/crates/xtask/src/common/mod.rs new file mode 100644 index 000000000..6e10f4ada --- /dev/null +++ b/crates/xtask/src/common/mod.rs @@ -0,0 +1 @@ +pub mod args; diff --git a/crates/xtask/src/lib.rs b/crates/xtask/src/lib.rs index cbda260db..852af9d40 100644 --- a/crates/xtask/src/lib.rs +++ b/crates/xtask/src/lib.rs @@ -1 +1,3 @@ pub mod bench; +pub mod common; +pub mod test; diff --git a/crates/xtask/src/main.rs b/crates/xtask/src/main.rs index f260bd404..a742ac430 100644 --- a/crates/xtask/src/main.rs +++ b/crates/xtask/src/main.rs @@ -1,7 +1,7 @@ use std::collections::HashSet; use clap::Parser; -use xtask::bench::BenchDeriveArgs; +use xtask::{bench::BenchDeriveArgs, test::TestDeriveArgs}; /// List features available in the workspace #[derive(Parser, Debug)] @@ -20,6 +20,7 @@ struct ListFeaturesDeriveArgs { enum Command { ListFeatures(ListFeaturesDeriveArgs), Bench(BenchDeriveArgs), + Test(TestDeriveArgs), } fn main() -> anyhow::Result<()> { @@ -27,6 +28,7 @@ fn main() -> anyhow::Result<()> { match args { Command::ListFeatures(args) => list_features(args), Command::Bench(args) => xtask::bench::run(args)?, + Command::Test(args) => todo!(), } Ok(()) } diff --git a/crates/xtask/src/test/mod.rs b/crates/xtask/src/test/mod.rs new file mode 100644 index 000000000..d2d52af40 --- /dev/null +++ b/crates/xtask/src/test/mod.rs @@ -0,0 +1,11 @@ +use clap::Parser; + +use crate::common::args::CommonArgs; + +/// Run tests from a workload +#[derive(Parser, Debug)] +pub struct TestDeriveArgs { + /// Common arguments shared with other commands + #[command(flatten)] + common: CommonArgs, +}