@@ -139,6 +139,7 @@ func RunBake(dockerCli command.Cli, in BakeOptions, validator BakeValidator, pri
139139 AdditionalTags : in .additionalTags ,
140140 AdditionalCredentials : in .additionalCredentials ,
141141 AddTargetSuffix : true ,
142+ RequestedTargets : requestedTargets ,
142143 }
143144 buildOpts = registry .WithDepotSave (buildOpts , opts )
144145 }
@@ -178,9 +179,12 @@ func RunBake(dockerCli command.Cli, in BakeOptions, validator BakeValidator, pri
178179 metadata [k ] = v
179180 }
180181 }
181- dt [buildRes .Name ] = metadata
182+ // Only include targets that have metadata (i.e., were exported)
183+ if len (metadata ) > 0 {
184+ dt [buildRes .Name ] = metadata
185+ }
182186 }
183- err = writeMetadataFile (in .metadataFile , in .project , in .buildID , requestedTargets , dt )
187+ err = writeMetadataFile (in .metadataFile , in .project , in .buildID , requestedTargets , dt , true )
184188 if err != nil {
185189 return err
186190 }
@@ -476,20 +480,26 @@ func (t *LocalBakeValidator) Validate(ctx context.Context, _ []builder.Node, _ p
476480 "BAKE_LOCAL_PLATFORM" : platforms .DefaultString (),
477481 }
478482
479- targets , groups , err := bake .ReadTargets (ctx , files , t .bakeTargets .Targets , overrides , defaults )
483+ targets , _ , err := bake .ReadTargets (ctx , files , t .bakeTargets .Targets , overrides , defaults )
484+ if err != nil {
485+ t .err = err
486+ return
487+ }
488+
489+ // Parse config to properly resolve groups
490+ c , err := bake .ParseFiles (files , defaults )
480491 if err != nil {
481492 t .err = err
482493 return
483494 }
484495
485496 resolvedTargets := map [string ]struct {}{}
486497 for _ , target := range t .bakeTargets .Targets {
487- if _ , ok := targets [target ]; ok {
488- resolvedTargets [target ] = struct {}{}
489- }
490- if _ , ok := groups [target ]; ok {
491- for _ , t := range groups [target ].Targets {
492- resolvedTargets [t ] = struct {}{}
498+ // Use ResolveGroup to recursively resolve groups to their targets
499+ ts , _ := c .ResolveGroup (target )
500+ for _ , tname := range ts {
501+ if _ , ok := targets [tname ]; ok {
502+ resolvedTargets [tname ] = struct {}{}
493503 }
494504 }
495505 }
@@ -539,20 +549,25 @@ func (t *RemoteBakeValidator) Validate(ctx context.Context, nodes []builder.Node
539549 "BAKE_LOCAL_PLATFORM" : platforms .DefaultString (),
540550 }
541551
542- targets , groups , err := bake .ReadTargets (ctx , files , t .bakeTargets .Targets , overrides , defaults )
552+ targets , _ , err := bake .ReadTargets (ctx , files , t .bakeTargets .Targets , overrides , defaults )
553+ if err != nil {
554+ return nil , nil , err
555+ }
556+
557+ // Parse config to properly resolve groups
558+ c , err := bake .ParseFiles (files , defaults )
543559 if err != nil {
544560 return nil , nil , err
545561 }
546562
547563 requestedTargets := []string {}
548564 uniqueTargets := map [string ]struct {}{}
549565 for _ , target := range t .bakeTargets .Targets {
550- if _ , ok := targets [target ]; ok {
551- uniqueTargets [target ] = struct {}{}
552- }
553- if _ , ok := groups [target ]; ok {
554- for _ , t := range groups [target ].Targets {
555- uniqueTargets [t ] = struct {}{}
566+ // Use ResolveGroup to recursively resolve groups to their targets
567+ ts , _ := c .ResolveGroup (target )
568+ for _ , tname := range ts {
569+ if _ , ok := targets [tname ]; ok {
570+ uniqueTargets [tname ] = struct {}{}
556571 }
557572 }
558573 }
0 commit comments