@@ -9,6 +9,7 @@ use instruments::mongo_tracer::{install_mongodb_tracer, MongoTracer};
99use run_environment:: interfaces:: { RepositoryProvider , RunEnvironment } ;
1010use runner:: get_run_data;
1111use serde:: Serialize ;
12+ use std:: path:: PathBuf ;
1213
1314pub mod check_system;
1415pub 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 ! ( ) ;
0 commit comments