Skip to content

Commit 36ac0ba

Browse files
feat: allow only running the benchmarks, and only uploading the results
1 parent 2cfcd0d commit 36ac0ba

3 files changed

Lines changed: 58 additions & 24 deletions

File tree

src/run/config.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::prelude::*;
22
use crate::run::instruments::Instruments;
3+
use std::path::PathBuf;
34
use url::Url;
45

56
use crate::run::run_environment::RepositoryProvider;
@@ -18,7 +19,9 @@ pub struct Config {
1819
pub mode: RunnerMode,
1920
pub instruments: Instruments,
2021

22+
pub profile_folder: Option<PathBuf>,
2123
pub skip_upload: bool,
24+
pub skip_run: bool,
2225
pub skip_setup: bool,
2326
}
2427

@@ -47,7 +50,9 @@ impl Config {
4750
command: "".into(),
4851
mode: RunnerMode::Instrumentation,
4952
instruments: Instruments::test(),
53+
profile_folder: None,
5054
skip_upload: false,
55+
skip_run: false,
5156
skip_setup: false,
5257
}
5358
}
@@ -82,7 +87,9 @@ impl TryFrom<RunArgs> for Config {
8287
mode: args.mode,
8388
instruments,
8489
command: args.command.join(" "),
90+
profile_folder: args.profile_folder,
8591
skip_upload: args.skip_upload,
92+
skip_run: args.skip_run,
8693
skip_setup: args.skip_setup,
8794
})
8895
}
@@ -113,7 +120,9 @@ mod tests {
113120
instruments: vec![],
114121
mongo_uri_env_name: None,
115122
message_format: None,
123+
profile_folder: None,
116124
skip_upload: false,
125+
skip_run: false,
117126
skip_setup: false,
118127
command: vec!["cargo".into(), "codspeed".into(), "bench".into()],
119128
})
@@ -124,6 +133,7 @@ mod tests {
124133
assert_eq!(config.working_directory, None);
125134
assert_eq!(config.instruments, Instruments { mongodb: None });
126135
assert!(!config.skip_upload);
136+
assert!(!config.skip_run);
127137
assert!(!config.skip_setup);
128138
assert_eq!(config.command, "cargo codspeed bench");
129139
}
@@ -140,7 +150,9 @@ mod tests {
140150
instruments: vec!["mongodb".into()],
141151
mongo_uri_env_name: Some("MONGODB_URI".into()),
142152
message_format: Some(crate::run::MessageFormat::Json),
153+
profile_folder: Some("./codspeed.out".into()),
143154
skip_upload: true,
155+
skip_run: true,
144156
skip_setup: true,
145157
command: vec!["cargo".into(), "codspeed".into(), "bench".into()],
146158
})
@@ -168,7 +180,9 @@ mod tests {
168180
})
169181
}
170182
);
183+
assert_eq!(config.profile_folder, Some("./codspeed.out".into()));
171184
assert!(config.skip_upload);
185+
assert!(config.skip_run);
172186
assert!(config.skip_setup);
173187
assert_eq!(config.command, "cargo codspeed bench");
174188
}

src/run/mod.rs

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use instruments::mongo_tracer::{install_mongodb_tracer, MongoTracer};
99
use run_environment::interfaces::{RepositoryProvider, RunEnvironment};
1010
use runner::get_run_data;
1111
use serde::Serialize;
12+
use std::path::PathBuf;
1213

1314
pub mod check_system;
1415
pub mod helpers;
@@ -79,6 +80,10 @@ pub struct RunArgs {
7980
#[arg(long)]
8081
pub mongo_uri_env_name: Option<String>,
8182

83+
/// Profile folder to use for the run.
84+
#[arg(long)]
85+
pub profile_folder: Option<PathBuf>,
86+
8287
#[arg(long, hide = true)]
8388
pub message_format: Option<MessageFormat>,
8489

@@ -90,6 +95,10 @@ pub struct RunArgs {
9095
env = "CODSPEED_SKIP_UPLOAD"
9196
)]
9297
pub skip_upload: bool,
98+
/// Used internally to upload the results after running the benchmarks in a sandbox environment
99+
/// with no internet access
100+
#[arg(long, default_value = "false", hide = true)]
101+
pub skip_run: bool,
93102

94103
/// Only for debugging purposes, skips the setup of the runner
95104
#[arg(long, default_value = "false", hide = true)]
@@ -126,7 +135,9 @@ impl RunArgs {
126135
instruments: vec![],
127136
mongo_uri_env_name: None,
128137
message_format: None,
138+
profile_folder: None,
129139
skip_upload: false,
140+
skip_run: false,
130141
skip_setup: false,
131142
command: vec![],
132143
}
@@ -172,35 +183,40 @@ pub async fn run(
172183
end_group!();
173184
}
174185

175-
let run_data = get_run_data()?;
186+
let run_data = get_run_data(&config)?;
176187

177-
start_opened_group!("Running the benchmarks");
178-
179-
// TODO: refactor and move directly in the Instruments struct as a `start` method
180-
let mongo_tracer = if let Some(mongodb_config) = &config.instruments.mongodb {
181-
let mut mongo_tracer = MongoTracer::try_from(&run_data.profile_folder, mongodb_config)?;
182-
mongo_tracer.start().await?;
183-
Some(mongo_tracer)
184-
} else {
185-
None
186-
};
188+
if !config.skip_run {
189+
start_opened_group!("Running the benchmarks");
187190

188-
executor
189-
.run(&config, &system_info, &run_data, &mongo_tracer)
190-
.await?;
191+
// TODO: refactor and move directly in the Instruments struct as a `start` method
192+
let mongo_tracer = if let Some(mongodb_config) = &config.instruments.mongodb {
193+
let mut mongo_tracer = MongoTracer::try_from(&run_data.profile_folder, mongodb_config)?;
194+
mongo_tracer.start().await?;
195+
Some(mongo_tracer)
196+
} else {
197+
None
198+
};
191199

192-
// TODO: refactor and move directly in the Instruments struct as a `stop` method
193-
if let Some(mut mongo_tracer) = mongo_tracer {
194-
mongo_tracer.stop().await?;
195-
}
200+
executor
201+
.run(&config, &system_info, &run_data, &mongo_tracer)
202+
.await?;
196203

197-
executor.teardown(&config, &system_info, &run_data).await?;
204+
// TODO: refactor and move directly in the Instruments struct as a `stop` method
205+
if let Some(mut mongo_tracer) = mongo_tracer {
206+
mongo_tracer.stop().await?;
207+
}
208+
executor.teardown(&config, &system_info, &run_data).await?;
198209

199-
end_group!();
210+
end_group!();
211+
} else {
212+
debug!("Skipping the run of the benchmarks");
213+
};
200214

201215
if !config.skip_upload {
202216
start_group!("Uploading performance data");
203-
logger.persist_log_to_profile_folder(&run_data)?;
217+
if !config.skip_run {
218+
logger.persist_log_to_profile_folder(&run_data)?;
219+
}
204220
let upload_result =
205221
uploader::upload(&config, &system_info, &provider, &run_data, executor.name()).await?;
206222
end_group!();

src/run/runner/mod.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::fmt::Display;
22

33
use crate::prelude::*;
44

5-
use super::RunnerMode;
5+
use super::{config::Config, RunnerMode};
66

77
mod executor;
88
mod helpers;
@@ -41,7 +41,11 @@ pub fn get_all_executors() -> Vec<Box<dyn Executor>> {
4141
]
4242
}
4343

44-
pub fn get_run_data() -> Result<RunData> {
45-
let profile_folder = create_profile_folder()?;
44+
pub fn get_run_data(config: &Config) -> Result<RunData> {
45+
let profile_folder = if let Some(profile_folder) = &config.profile_folder {
46+
profile_folder.clone()
47+
} else {
48+
create_profile_folder()?
49+
};
4650
Ok(RunData { profile_folder })
4751
}

0 commit comments

Comments
 (0)