Skip to content

Commit 68ca926

Browse files
chore: add orchestrator to run multiple mode (TO REVIEW)
1 parent f9f65c2 commit 68ca926

17 files changed

Lines changed: 338 additions & 300 deletions

File tree

src/cli/exec/mod.rs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ use crate::prelude::*;
77
use crate::project_config::ProjectConfig;
88
use crate::project_config::merger::ConfigMerger;
99
use crate::upload::UploadResult;
10+
use crate::upload::poll_results::{PollResultsOptions, poll_results};
1011
use clap::Args;
1112
use std::path::Path;
1213

1314
pub mod multi_targets;
14-
mod poll_results;
1515

1616
/// We temporarily force this name for all exec runs
1717
pub const DEFAULT_REPOSITORY_NAME: &str = "local-runs";
@@ -91,20 +91,19 @@ pub async fn run(
9191
/// result polling. It is used by both `codspeed exec` directly and by `codspeed run` when
9292
/// executing targets defined in codspeed.yaml.
9393
pub async fn execute_with_harness(
94-
config: crate::executor::Config,
94+
mut config: crate::executor::Config,
9595
api_client: &CodSpeedAPIClient,
9696
codspeed_config: &CodSpeedConfig,
9797
setup_cache_dir: Option<&Path>,
9898
) -> Result<()> {
99-
let mut execution_context =
100-
executor::ExecutionContext::new(config, codspeed_config, api_client).await?;
99+
let orchestrator =
100+
executor::Orchestrator::new(&mut config, codspeed_config, api_client).await?;
101101

102-
if !execution_context.is_local() {
102+
if !orchestrator.is_local() {
103103
super::show_banner();
104104
}
105105

106-
debug!("config: {:#?}", execution_context.config);
107-
let executor = executor::get_executor_from_mode(&execution_context.config.mode);
106+
debug!("config: {config:#?}");
108107

109108
let get_exec_harness_installer_url = || {
110109
format!(
@@ -120,17 +119,14 @@ pub async fn execute_with_harness(
120119
)
121120
.await?;
122121

122+
let poll_opts = PollResultsOptions::for_exec();
123123
let poll_results_fn = async |upload_result: &UploadResult| {
124-
poll_results::poll_results(api_client, upload_result).await
124+
poll_results(api_client, upload_result, &poll_opts).await
125125
};
126126

127-
executor::execute_benchmarks(
128-
executor.as_ref(),
129-
&mut execution_context,
130-
setup_cache_dir,
131-
poll_results_fn,
132-
)
133-
.await?;
127+
orchestrator
128+
.execute(&mut config, setup_cache_dir, poll_results_fn)
129+
.await?;
134130

135131
Ok(())
136132
}

src/cli/exec/poll_results.rs

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/cli/run/logger.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use crate::executor::ExecutionContext;
21
use crate::logger::{GROUP_TARGET, OPENED_GROUP_TARGET};
32
use crate::prelude::*;
43
use crate::run_environment::RunEnvironmentProvider;
54
use log::LevelFilter;
65
use simplelog::{CombinedLogger, WriteLogger};
76
use std::fs::copy;
8-
use std::path::PathBuf;
7+
use std::path::{Path, PathBuf};
98
use tempfile::NamedTempFile;
109

1110
pub struct Logger {
@@ -34,11 +33,7 @@ impl Logger {
3433
Ok(Self { log_file_path })
3534
}
3635

37-
pub fn persist_log_to_profile_folder(
38-
&self,
39-
execution_context: &ExecutionContext,
40-
) -> Result<()> {
41-
let profile_folder = execution_context.profile_folder.clone();
36+
pub fn persist_log_to_profile_folder(&self, profile_folder: &Path) -> Result<()> {
4237
let dest_log_file_path = profile_folder.join("runner.log");
4338
debug!("Persisting log file to {}", dest_log_file_path.display());
4439
log::logger().flush();

src/cli/run/mod.rs

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ use crate::project_config::ProjectConfig;
88
use crate::project_config::merger::ConfigMerger;
99
use crate::run_environment::interfaces::RepositoryProvider;
1010
use crate::upload::UploadResult;
11+
use crate::upload::poll_results::{PollResultsOptions, poll_results};
1112
use clap::{Args, ValueEnum};
1213
use std::path::Path;
1314

1415
pub mod helpers;
1516
pub mod logger;
16-
mod poll_results;
1717

1818
#[derive(Args, Debug)]
1919
pub struct RunArgs {
@@ -70,7 +70,7 @@ impl RunArgs {
7070
repository: None,
7171
provider: None,
7272
working_directory: None,
73-
mode: Some(RunnerMode::Simulation),
73+
mode: vec![RunnerMode::Simulation],
7474
simulation_tool: None,
7575
profile_folder: None,
7676
skip_upload: false,
@@ -141,30 +141,23 @@ pub async fn run(
141141

142142
match run_target {
143143
RunTarget::SingleCommand(args) => {
144-
let config = Config::try_from(args)?;
144+
let mut config = Config::try_from(args)?;
145145

146-
// Create execution context
147-
let mut execution_context =
148-
executor::ExecutionContext::new(config, codspeed_config, api_client).await?;
146+
let orchestrator =
147+
executor::Orchestrator::new(&mut config, codspeed_config, api_client).await?;
149148

150-
if !execution_context.is_local() {
149+
if !orchestrator.is_local() {
151150
super::show_banner();
152151
}
153-
debug!("config: {:#?}", execution_context.config);
154-
155-
// Execute benchmarks
156-
let executor = executor::get_executor_from_mode(&execution_context.config.mode);
152+
debug!("config: {config:#?}");
157153

154+
let poll_opts = PollResultsOptions::for_run(output_json);
158155
let poll_results_fn = async |upload_result: &UploadResult| {
159-
poll_results::poll_results(api_client, upload_result, output_json).await
156+
poll_results(api_client, upload_result, &poll_opts).await
160157
};
161-
executor::execute_benchmarks(
162-
executor.as_ref(),
163-
&mut execution_context,
164-
setup_cache_dir,
165-
poll_results_fn,
166-
)
167-
.await?;
158+
orchestrator
159+
.execute(&mut config, setup_cache_dir, poll_results_fn)
160+
.await?;
168161
}
169162

170163
RunTarget::ConfigTargets {

src/cli/run/poll_results.rs

Lines changed: 0 additions & 69 deletions
This file was deleted.

src/cli/show.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
use crate::prelude::*;
22

33
pub fn run() -> Result<()> {
4-
let shell_session_mode = crate::runner_mode::load_shell_session_mode()?;
4+
let modes = crate::runner_mode::load_shell_session_mode()?;
55

6-
if let Some(mode) = shell_session_mode {
7-
info!("{mode:?}");
8-
} else {
6+
if modes.is_empty() {
97
info!("No mode set for this shell session");
8+
} else {
9+
let modes_str = modes
10+
.iter()
11+
.map(|m| format!("{m:?}"))
12+
.collect::<Vec<_>>()
13+
.join(", ");
14+
info!("{modes_str}");
1015
}
1116

1217
Ok(())

src/cli/use_mode.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ use clap::Args;
66

77
#[derive(Debug, Args)]
88
pub struct UseArgs {
9-
/// Set the CodSpeed runner mode for this shell session. If not provided, the current mode will
10-
/// be displayed.
11-
pub mode: RunnerMode,
9+
/// Set the CodSpeed runner mode(s) for this shell session.
10+
/// Multiple modes can be provided as separate arguments (e.g. `simulation walltime`)
11+
/// or comma-separated (e.g. `simulation,walltime`).
12+
#[arg(value_delimiter = ',', required = true)]
13+
pub mode: Vec<RunnerMode>,
1214
}
1315

1416
pub fn run(args: UseArgs) -> Result<()> {

0 commit comments

Comments
 (0)