@@ -92,7 +92,7 @@ struct GithubActionsJob {
92
92
/// prefix (PR/try/auto).
93
93
full_name : String ,
94
94
os : String ,
95
- env : BTreeMap < String , String > ,
95
+ env : BTreeMap < String , serde_json :: Value > ,
96
96
#[ serde( flatten) ]
97
97
extra_keys : BTreeMap < String , serde_json:: Value > ,
98
98
}
@@ -165,15 +165,12 @@ fn skip_jobs(jobs: Vec<Job>, channel: &str) -> Vec<Job> {
165
165
. collect ( )
166
166
}
167
167
168
- fn to_string_map ( map : & BTreeMap < String , Value > ) -> BTreeMap < String , String > {
169
- map. iter ( )
168
+ fn yaml_map_to_json ( map : & BTreeMap < String , Value > ) -> BTreeMap < String , serde_json :: Value > {
169
+ map. into_iter ( )
170
170
. map ( |( key, value) | {
171
171
(
172
172
key. clone ( ) ,
173
- serde_yaml:: to_string ( value)
174
- . expect ( "Cannot serialize YAML value to string" )
175
- . trim ( )
176
- . to_string ( ) ,
173
+ serde_json:: to_value ( & value) . expect ( "Cannot convert map value from YAML to JSON" ) ,
177
174
)
178
175
} )
179
176
. collect ( )
@@ -222,26 +219,16 @@ fn calculate_jobs(
222
219
let jobs = jobs
223
220
. into_iter ( )
224
221
. map ( |job| {
225
- let mut env: BTreeMap < String , String > = to_string_map ( base_env) ;
226
- env. extend ( to_string_map ( & job. env ) ) ;
222
+ let mut env: BTreeMap < String , serde_json :: Value > = yaml_map_to_json ( base_env) ;
223
+ env. extend ( yaml_map_to_json ( & job. env ) ) ;
227
224
let full_name = format ! ( "{prefix} - {}" , job. name) ;
228
225
229
226
GithubActionsJob {
230
227
name : job. name ,
231
228
full_name,
232
229
os : job. os ,
233
230
env,
234
- extra_keys : job
235
- . extra_keys
236
- . into_iter ( )
237
- . map ( |( key, value) | {
238
- (
239
- key,
240
- serde_json:: to_value ( & value)
241
- . expect ( "Cannot convert extra key value from YAML to JSON" ) ,
242
- )
243
- } )
244
- . collect ( ) ,
231
+ extra_keys : yaml_map_to_json ( & job. extra_keys ) ,
245
232
}
246
233
} )
247
234
. collect ( ) ;
@@ -314,7 +301,15 @@ fn run_workflow_locally(db: JobDatabase, job_type: JobType, name: String) -> any
314
301
custom_env. insert ( "DEPLOY" . to_string ( ) , "1" . to_string ( ) ) ;
315
302
}
316
303
}
317
- custom_env. extend ( to_string_map ( & job. env ) ) ;
304
+ custom_env. extend ( job. env . iter ( ) . map ( |( key, value) | {
305
+ let value = match value {
306
+ Value :: Bool ( value) => value. to_string ( ) ,
307
+ Value :: Number ( value) => value. to_string ( ) ,
308
+ Value :: String ( value) => value. clone ( ) ,
309
+ _ => panic ! ( "Unexpected type for environment variable {key} Only bool/number/string is supported." )
310
+ } ;
311
+ ( key. clone ( ) , value)
312
+ } ) ) ;
318
313
319
314
let mut cmd = Command :: new ( Path :: new ( DOCKER_DIRECTORY ) . join ( "run.sh" ) ) ;
320
315
cmd. arg ( job. image ( ) ) ;
0 commit comments