@@ -123,18 +123,26 @@ impl Green {
123
123
// TODO: handle worskpace cfg + merging fields
124
124
// TODO: find a way to read cfg on `cargo install <non-local code>` cc https://github.com/rust-lang/cargo/issues/9700#issuecomment-2748617896
125
125
pub ( crate ) fn new_from_env_then_manifest ( ) -> Result < Self > {
126
- let manifest_path =
127
- find_manifest_path ( ) . map_err ( |e| anyhow ! ( "Can't find package manifest: {e}" ) ) ?;
128
-
129
- let manifest = Manifest :: from_path ( & manifest_path)
130
- . map_err ( |e| anyhow ! ( "Can't read package manifest {manifest_path}: {e}" ) ) ?;
126
+ let manifest = if let Some ( manifest_path) =
127
+ find_manifest_path ( ) . map_err ( |e| anyhow ! ( "Can't find package manifest: {e}" ) ) ?
128
+ {
129
+ let manifest = Manifest :: from_path ( & manifest_path)
130
+ . map_err ( |e| anyhow ! ( "Can't read package manifest {manifest_path}: {e}" ) ) ?;
131
+ Some ( manifest)
132
+ } else {
133
+ None
134
+ } ;
131
135
132
136
Self :: try_new ( manifest) . map_err ( |e| anyhow ! ( "Failed reading {PKG} configuration: {e}" ) )
133
137
}
134
138
135
- fn try_new ( manifest : Manifest ) -> Result < Self > {
139
+ fn try_new ( manifest : Option < Manifest > ) -> Result < Self > {
136
140
let mut green = Self :: default ( ) ;
137
- if let Some ( metadata) = manifest. package . and_then ( |x| x. metadata ) {
141
+ if let Some ( Manifest {
142
+ package : Some ( cargo_toml:: Package { metadata : Some ( metadata) , .. } ) ,
143
+ ..
144
+ } ) = manifest
145
+ {
138
146
#[ derive( Deserialize , Default ) ]
139
147
struct GreenMetadata {
140
148
green : Option < Green > ,
@@ -265,7 +273,7 @@ name = "test-package"
265
273
"#
266
274
) )
267
275
. unwrap ( ) ;
268
- let mut green = Green :: try_new ( manifest) . unwrap ( ) ;
276
+ let mut green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
269
277
assert ! ( !green. image. base_image. is_empty( ) ) ;
270
278
green. image . base_image = ImageUri :: default ( ) ;
271
279
assert ! ( green. image. base_image. is_empty( ) ) ;
@@ -288,7 +296,7 @@ add.apk = [ "libpq-dev", "pkgconf" ]
288
296
"# ,
289
297
)
290
298
. unwrap ( ) ;
291
- let green = Green :: try_new ( manifest) . unwrap ( ) ;
299
+ let green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
292
300
assert_eq ! ( green. add. apt, vec![ "libpq-dev" . to_owned( ) , "pkg-config" . to_owned( ) ] ) ;
293
301
assert_eq ! ( green. add. apt_get, vec![ "libpq-dev" . to_owned( ) , "pkg-config" . to_owned( ) ] ) ;
294
302
assert_eq ! ( green. add. apk, vec![ "libpq-dev" . to_owned( ) , "pkgconf" . to_owned( ) ] ) ;
@@ -307,7 +315,7 @@ add.{setting} = [ "" ]
307
315
"#
308
316
) )
309
317
. unwrap ( ) ;
310
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
318
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
311
319
assert ! ( err. contains( "empty" ) , "In: {err}" ) ;
312
320
}
313
321
@@ -324,7 +332,7 @@ add.{setting} = [ "'a'" ]
324
332
"#
325
333
) )
326
334
. unwrap ( ) ;
327
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
335
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
328
336
assert ! ( err. contains( "quotes" ) , "In: {err}" ) ;
329
337
}
330
338
@@ -341,7 +349,7 @@ add.{setting} = [ "a b" ]
341
349
"#
342
350
) )
343
351
. unwrap ( ) ;
344
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
352
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
345
353
assert ! ( err. contains( "space" ) , "In: {err}" ) ;
346
354
}
347
355
@@ -358,7 +366,7 @@ add.{setting} = [ "a", "b", "a" ]
358
366
"#
359
367
) )
360
368
. unwrap ( ) ;
361
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
369
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
362
370
assert ! ( err. contains( "duplicates" ) , "In: {err}" ) ;
363
371
}
364
372
@@ -376,7 +384,7 @@ set-envs = [ "GIT_AUTH_TOKEN", "TYPENUM_BUILD_CONSTS", "TYPENUM_BUILD_OP" ]
376
384
"# ,
377
385
)
378
386
. unwrap ( ) ;
379
- let green = Green :: try_new ( manifest) . unwrap ( ) ;
387
+ let green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
380
388
assert_eq ! (
381
389
green. set_envs,
382
390
vec![
@@ -399,7 +407,7 @@ set-envs = [ "" ]
399
407
"# ,
400
408
)
401
409
. unwrap ( ) ;
402
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
410
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
403
411
assert ! ( err. contains( "empty name" ) , "In: {err}" ) ;
404
412
}
405
413
@@ -415,7 +423,7 @@ set-envs = [ "'a'" ]
415
423
"# ,
416
424
)
417
425
. unwrap ( ) ;
418
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
426
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
419
427
assert ! ( err. contains( "quotes" ) , "In: {err}" ) ;
420
428
}
421
429
@@ -431,7 +439,7 @@ set-envs = [ "A B" ]
431
439
"# ,
432
440
)
433
441
. unwrap ( ) ;
434
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
442
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
435
443
assert ! ( err. contains( "space" ) , "In: {err}" ) ;
436
444
}
437
445
@@ -447,7 +455,7 @@ set-envs = [ "CARGOGREEN_LOG" ]
447
455
"# ,
448
456
)
449
457
. unwrap ( ) ;
450
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
458
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
451
459
assert ! ( err. contains( crate :: rustc_wrapper:: ENV ) , "In: {err}" ) ;
452
460
}
453
461
@@ -463,7 +471,7 @@ set-envs = [ "A", "B", "A" ]
463
471
"# ,
464
472
)
465
473
. unwrap ( ) ;
466
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
474
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
467
475
assert ! ( err. contains( "duplicates" ) , "In: {err}" ) ;
468
476
}
469
477
@@ -481,7 +489,7 @@ base-image = "docker-image://docker.io/library/rust:1"
481
489
"# ,
482
490
)
483
491
. unwrap ( ) ;
484
- let green = Green :: try_new ( manifest) . unwrap ( ) ;
492
+ let green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
485
493
assert_eq ! (
486
494
green. image,
487
495
BaseImage {
@@ -504,7 +512,7 @@ base-image = "docker.io/library/rust:1"
504
512
"# ,
505
513
)
506
514
. unwrap ( ) ;
507
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
515
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
508
516
assert ! ( err. contains( "scheme" ) , "In: {err}" ) ;
509
517
}
510
518
@@ -520,7 +528,7 @@ base-image = " docker-image://docker.io/library/rust:1 "
520
528
"# ,
521
529
)
522
530
. unwrap ( ) ;
523
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
531
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
524
532
assert ! ( err. contains( "space" ) , "In: {err}" ) ;
525
533
}
526
534
@@ -541,7 +549,7 @@ RUN --mount=type=secret,id=aws
541
549
"# ,
542
550
)
543
551
. unwrap ( ) ;
544
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
552
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
545
553
assert ! ( err. contains( "to match" ) , "In: {err}" ) ;
546
554
}
547
555
@@ -565,7 +573,7 @@ RUN --mount=type=secret,id=aws
565
573
"# ,
566
574
)
567
575
. unwrap ( ) ;
568
- let green = Green :: try_new ( manifest) . unwrap ( ) ;
576
+ let green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
569
577
assert_eq ! ( green. image, BaseImage {
570
578
base_image: ImageUri :: try_new( "docker-image://rust:1" ) . unwrap( ) ,
571
579
base_image_inline:
@@ -601,7 +609,7 @@ RUN --mount=type=secret,id=aws
601
609
"# ,
602
610
)
603
611
. unwrap ( ) ;
604
- let green = Green :: try_new ( manifest) . unwrap ( ) ;
612
+ let green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
605
613
assert_eq ! ( green. image, BaseImage {
606
614
base_image: ImageUri :: try_new( "docker-image://rust:1" ) . unwrap( ) ,
607
615
base_image_inline:
@@ -630,7 +638,7 @@ base-image-inline = ""
630
638
"# ,
631
639
)
632
640
. unwrap ( ) ;
633
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
641
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
634
642
assert ! ( err. contains( "empty" ) , "In: {err}" ) ;
635
643
}
636
644
@@ -649,7 +657,7 @@ RUN exit 42
649
657
"# ,
650
658
)
651
659
. unwrap ( ) ;
652
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
660
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
653
661
assert ! ( err. contains( "provide" ) , "In: {err}" ) ;
654
662
assert ! ( err. contains( "stage" ) , "In: {err}" ) ;
655
663
assert ! ( err. contains( "'rust-base'" ) , "In: {err}" ) ;
@@ -672,7 +680,7 @@ cache-images = [
672
680
"# ,
673
681
)
674
682
. unwrap ( ) ;
675
- let green = Green :: try_new ( manifest) . unwrap ( ) ;
683
+ let green = Green :: try_new ( Some ( manifest) ) . unwrap ( ) ;
676
684
assert_eq ! (
677
685
green. cache_images,
678
686
vec![
@@ -698,7 +706,7 @@ cache-images = [
698
706
"# ,
699
707
)
700
708
. unwrap ( ) ;
701
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
709
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
702
710
assert ! ( err. contains( "duplicates" ) , "In: {err}" ) ;
703
711
}
704
712
@@ -714,7 +722,7 @@ cache-images = ["docker-image://some-registry.com/dir/image 'docker-image://othe
714
722
"# ,
715
723
)
716
724
. unwrap ( ) ;
717
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
725
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
718
726
assert ! ( err. contains( "names" ) , "In: {err}" ) ;
719
727
}
720
728
@@ -730,7 +738,7 @@ cache-images = ["some-registry.com/dir/image"]
730
738
"# ,
731
739
)
732
740
. unwrap ( ) ;
733
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
741
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
734
742
assert ! ( err. contains( "scheme" ) , "In: {err}" ) ;
735
743
}
736
744
@@ -746,7 +754,7 @@ cache-images = ["docker-image://image"]
746
754
"# ,
747
755
)
748
756
. unwrap ( ) ;
749
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
757
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
750
758
assert ! ( err. contains( "registry" ) , "In: {err}" ) ;
751
759
}
752
760
@@ -762,7 +770,7 @@ cache-images = ["docker-image://some-registry.com/dir/image:sometag"]
762
770
"# ,
763
771
)
764
772
. unwrap ( ) ;
765
- let err = Green :: try_new ( manifest) . err ( ) . unwrap ( ) . to_string ( ) ;
773
+ let err = Green :: try_new ( Some ( manifest) ) . err ( ) . unwrap ( ) . to_string ( ) ;
766
774
assert ! ( err. contains( "tag" ) , "In: {err}" ) ;
767
775
}
768
776
0 commit comments