@@ -27,15 +27,15 @@ pub enum SimulationTool {
2727/// for controlling the execution flow. It is typically constructed from command-line
2828/// arguments via [`RunArgs`] and combined with [`CodSpeedConfig`] to create an
2929/// [`ExecutionContext`].
30- #[ derive( Debug ) ]
30+ #[ derive( Debug , Clone ) ]
3131pub struct Config {
3232 pub upload_url : Url ,
3333 pub token : Option < String > ,
3434 pub repository_override : Option < RepositoryOverride > ,
3535 pub working_directory : Option < String > ,
3636 pub command : String ,
3737
38- pub mode : RunnerMode ,
38+ pub modes : Vec < RunnerMode > ,
3939 pub instruments : Instruments ,
4040 pub enable_perf : bool ,
4141 /// Stack unwinding mode for perf (if enabled)
@@ -53,7 +53,7 @@ pub struct Config {
5353 pub go_runner_version : Option < Version > ,
5454}
5555
56- #[ derive( Debug , PartialEq , Clone ) ]
56+ #[ derive( Debug , Clone , PartialEq ) ]
5757pub struct RepositoryOverride {
5858 pub owner : String ,
5959 pub repository : String ,
@@ -81,6 +81,13 @@ impl Config {
8181 pub fn set_token ( & mut self , token : Option < String > ) {
8282 self . token = token;
8383 }
84+
85+ /// Create a clone of this config pinned to a single mode.
86+ pub fn for_mode ( & self , mode : & RunnerMode ) -> Config {
87+ let mut c = self . clone ( ) ;
88+ c. modes = vec ! [ mode. clone( ) ] ;
89+ c
90+ }
8491}
8592
8693#[ cfg( test) ]
@@ -93,7 +100,7 @@ impl Config {
93100 repository_override : None ,
94101 working_directory : None ,
95102 command : "" . into ( ) ,
96- mode : RunnerMode :: Simulation ,
103+ modes : vec ! [ RunnerMode :: Simulation ] ,
97104 instruments : Instruments :: test ( ) ,
98105 perf_unwinding_mode : None ,
99106 enable_perf : false ,
@@ -114,7 +121,7 @@ impl TryFrom<RunArgs> for Config {
114121 type Error = Error ;
115122 fn try_from ( args : RunArgs ) -> Result < Self > {
116123 let instruments = Instruments :: try_from ( & args) ?;
117- let mode = args. shared . resolve_mode ( ) ?;
124+ let modes = args. shared . resolve_modes ( ) ?;
118125 let raw_upload_url = args
119126 . shared
120127 . upload_url
@@ -131,7 +138,7 @@ impl TryFrom<RunArgs> for Config {
131138 . map ( |repo| RepositoryOverride :: from_arg ( repo, args. shared . provider ) )
132139 . transpose ( ) ?,
133140 working_directory : args. shared . working_directory ,
134- mode ,
141+ modes ,
135142 instruments,
136143 perf_unwinding_mode : args. shared . perf_run_args . perf_unwinding_mode ,
137144 enable_perf : args. shared . perf_run_args . enable_perf ,
@@ -153,7 +160,7 @@ impl Config {
153160 args : crate :: cli:: exec:: ExecArgs ,
154161 command : String ,
155162 ) -> Result < Self > {
156- let mode = args. shared . resolve_mode ( ) ?;
163+ let modes = args. shared . resolve_modes ( ) ?;
157164 let raw_upload_url = args
158165 . shared
159166 . upload_url
@@ -170,7 +177,7 @@ impl Config {
170177 . map ( |repo| RepositoryOverride :: from_arg ( repo, args. shared . provider ) )
171178 . transpose ( ) ?,
172179 working_directory : args. shared . working_directory ,
173- mode ,
180+ modes ,
174181 instruments : Instruments { mongodb : None } , // exec doesn't support MongoDB
175182 perf_unwinding_mode : args. shared . perf_run_args . perf_unwinding_mode ,
176183 enable_perf : args. shared . perf_run_args . enable_perf ,
@@ -210,7 +217,7 @@ mod tests {
210217 repository : None ,
211218 provider : None ,
212219 working_directory : None ,
213- mode : Some ( RunnerMode :: Simulation ) ,
220+ mode : vec ! [ RunnerMode :: Simulation ] ,
214221 simulation_tool : None ,
215222 profile_folder : None ,
216223 skip_upload : false ,
@@ -250,7 +257,7 @@ mod tests {
250257 repository : Some ( "owner/repo" . into ( ) ) ,
251258 provider : Some ( RepositoryProvider :: GitLab ) ,
252259 working_directory : Some ( "/tmp" . into ( ) ) ,
253- mode : Some ( RunnerMode :: Simulation ) ,
260+ mode : vec ! [ RunnerMode :: Simulation ] ,
254261 simulation_tool : None ,
255262 profile_folder : Some ( "./codspeed.out" . into ( ) ) ,
256263 skip_upload : true ,
@@ -334,7 +341,7 @@ mod tests {
334341 repository : None ,
335342 provider : None ,
336343 working_directory : None ,
337- mode : Some ( RunnerMode :: Simulation ) ,
344+ mode : vec ! [ RunnerMode :: Simulation ] ,
338345 simulation_tool : None ,
339346 profile_folder : None ,
340347 skip_upload : false ,
0 commit comments