Create the test xtask command and args

This commit is contained in:
Mubelotix
2025-08-25 11:23:46 +02:00
parent a94a13c9b0
commit d9177d4727
7 changed files with 63 additions and 30 deletions

View File

@ -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<String>,
@ -75,10 +64,6 @@ pub struct BenchDeriveArgs {
#[arg(long)]
master_key: Option<String>,
/// Authentication bearer for fetching assets
#[arg(long)]
assets_key: Option<String>,
/// Reason for the benchmark invocation
#[arg(short, long)]
reason: Option<String>,
@ -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()

View File

@ -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,

View File

@ -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<String>,
}

View File

@ -0,0 +1 @@
pub mod args;

View File

@ -1 +1,3 @@
pub mod bench;
pub mod common;
pub mod test;

View File

@ -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(())
}

View File

@ -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,
}