@@ -41,18 +41,12 @@ impl ConfigMerger {
4141 /// Note: Some fields like upload_url, token, repository are CLI-only and not in config.
4242 pub fn merge_shared_args (
4343 cli : & ExecAndRunSharedArgs ,
44- config_opts : Option < & ProjectOptions > ,
44+ _config_opts : Option < & ProjectOptions > ,
4545 ) -> ExecAndRunSharedArgs {
46- let mut merged = cli. clone ( ) ;
47-
48- // Merge working_directory if not set via CLI
49- if merged. working_directory . is_none ( ) {
50- if let Some ( opts) = config_opts {
51- merged. working_directory = opts. working_directory . clone ( ) ;
52- }
53- }
54-
55- merged
46+ // Note: working_directory is NOT merged here because config paths need to be
47+ // resolved relative to the config file directory. This resolution is handled
48+ // by the caller (e.g., `codspeed run`) which has access to the config file path.
49+ cli. clone ( )
5650 }
5751
5852 /// Helper to merge Option values with precedence: CLI > config > None
@@ -67,6 +61,29 @@ mod tests {
6761 use crate :: cli:: PerfRunArgs ;
6862 use crate :: runner_mode:: RunnerMode ;
6963
64+ fn make_cli ( working_directory : Option < & str > ) -> ExecAndRunSharedArgs {
65+ ExecAndRunSharedArgs {
66+ upload_url : None ,
67+ token : None ,
68+ repository : None ,
69+ provider : None ,
70+ working_directory : working_directory. map ( |s| s. to_string ( ) ) ,
71+ mode : vec ! [ RunnerMode :: Walltime ] ,
72+ simulation_tool : None ,
73+ profile_folder : None ,
74+ skip_upload : false ,
75+ skip_run : false ,
76+ skip_setup : false ,
77+ allow_empty : false ,
78+ go_runner_version : None ,
79+ show_full_output : false ,
80+ perf_run_args : PerfRunArgs {
81+ enable_perf : true ,
82+ perf_unwinding_mode : None ,
83+ } ,
84+ }
85+ }
86+
7087 #[ test]
7188 fn test_merge_walltime_all_from_cli ( ) {
7289 let cli = WalltimeExecutionArgs {
@@ -146,27 +163,7 @@ mod tests {
146163
147164 #[ test]
148165 fn test_merge_shared_args_working_directory_from_cli ( ) {
149- let cli = ExecAndRunSharedArgs {
150- upload_url : None ,
151- token : None ,
152- repository : None ,
153- provider : None ,
154- working_directory : Some ( "./cli-dir" . to_string ( ) ) ,
155- mode : vec ! [ RunnerMode :: Walltime ] ,
156- simulation_tool : None ,
157- profile_folder : None ,
158- skip_upload : false ,
159- skip_run : false ,
160- skip_setup : false ,
161- allow_empty : false ,
162- go_runner_version : None ,
163- show_full_output : false ,
164- perf_run_args : PerfRunArgs {
165- enable_perf : true ,
166- perf_unwinding_mode : None ,
167- } ,
168- } ;
169-
166+ let cli = make_cli ( Some ( "./cli-dir" ) ) ;
170167 let config = ProjectOptions {
171168 walltime : None ,
172169 working_directory : Some ( "./config-dir" . to_string ( ) ) ,
@@ -179,69 +176,30 @@ mod tests {
179176 }
180177
181178 #[ test]
182- fn test_merge_shared_args_working_directory_from_config ( ) {
183- let cli = ExecAndRunSharedArgs {
184- upload_url : None ,
185- token : None ,
186- repository : None ,
187- provider : None ,
188- working_directory : None ,
189- mode : vec ! [ RunnerMode :: Walltime ] ,
190- simulation_tool : None ,
191- profile_folder : None ,
192- skip_upload : false ,
193- skip_run : false ,
194- skip_setup : false ,
195- allow_empty : false ,
196- go_runner_version : None ,
197- show_full_output : false ,
198- perf_run_args : PerfRunArgs {
199- enable_perf : true ,
200- perf_unwinding_mode : None ,
201- } ,
202- } ;
203-
179+ fn test_merge_shared_args_working_directory_not_merged_from_config ( ) {
180+ let cli = make_cli ( None ) ;
204181 let config = ProjectOptions {
205182 walltime : None ,
206183 working_directory : Some ( "./config-dir" . to_string ( ) ) ,
207184 } ;
208185
209186 let merged = ConfigMerger :: merge_shared_args ( & cli, Some ( & config) ) ;
210187
211- // Config working_directory should be used
212- assert_eq ! ( merged. working_directory, Some ( "./config-dir" . to_string( ) ) ) ;
188+ // Config working_directory is NOT merged — resolution is handled by the caller
189+ // relative to the config file directory.
190+ assert_eq ! ( merged. working_directory, None ) ;
213191 // Mode stays as CLI value
214192 assert_eq ! ( merged. mode, vec![ RunnerMode :: Walltime ] ) ;
215193 }
216194
217195 #[ test]
218196 fn test_merge_shared_args_no_config ( ) {
219- let cli = ExecAndRunSharedArgs {
220- upload_url : None ,
221- token : None ,
222- repository : None ,
223- provider : None ,
224- working_directory : Some ( "./dir" . to_string ( ) ) ,
225- mode : vec ! [ RunnerMode :: Simulation ] ,
226- simulation_tool : None ,
227- profile_folder : None ,
228- skip_upload : false ,
229- skip_run : false ,
230- skip_setup : false ,
231- allow_empty : false ,
232- go_runner_version : None ,
233- show_full_output : false ,
234- perf_run_args : PerfRunArgs {
235- enable_perf : false ,
236- perf_unwinding_mode : None ,
237- } ,
238- } ;
197+ let cli = make_cli ( Some ( "./dir" ) ) ;
239198
240199 let merged = ConfigMerger :: merge_shared_args ( & cli, None ) ;
241200
242201 // Should be identical to CLI
243202 assert_eq ! ( merged. working_directory, Some ( "./dir" . to_string( ) ) ) ;
244- assert_eq ! ( merged. mode, vec![ RunnerMode :: Simulation ] ) ;
245203 }
246204
247205 #[ test]
0 commit comments