@@ -541,7 +541,7 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s
541541 }
542542
543543 if pushNames != "" {
544- progress .Write (pw , fmt .Sprintf ("merging manifest list %s" , pushNames ), func () error {
544+ err := progress .Write (pw , fmt .Sprintf ("merging manifest list %s" , pushNames ), func () error {
545545 descs := make ([]specs.Descriptor , 0 , len (res ))
546546
547547 for _ , r := range res {
@@ -637,6 +637,9 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s
637637 }
638638 return nil
639639 })
640+ if err != nil {
641+ return err
642+ }
640643 }
641644 return nil
642645 })
@@ -781,11 +784,11 @@ func calculateChildTargets(reqs map[string][]*reqForNode, opt map[string]Options
781784}
782785
783786func waitContextDeps (ctx context.Context , index int , results * waitmap.Map , so * client.SolveOpt ) error {
784- m := map [string ]string {}
787+ m := map [string ][] string {}
785788 for k , v := range so .FrontendAttrs {
786789 if strings .HasPrefix (k , "context:" ) && strings .HasPrefix (v , "target:" ) {
787790 target := resultKey (index , strings .TrimPrefix (v , "target:" ))
788- m [target ] = k
791+ m [target ] = append ( m [ target ], k )
789792 }
790793 }
791794 if len (m ) == 0 {
@@ -800,7 +803,7 @@ func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *c
800803 return err
801804 }
802805
803- for k , v := range m {
806+ for k , contexts := range m {
804807 r , ok := res [k ]
805808 if ! ok {
806809 continue
@@ -815,51 +818,54 @@ func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *c
815818 if so .FrontendInputs == nil {
816819 so .FrontendInputs = map [string ]llb.State {}
817820 }
818- if len (rr .Refs ) > 0 {
819- for platform , r := range rr .Refs {
820- st , err := r .ToState ()
821+
822+ for _ , v := range contexts {
823+ if len (rr .Refs ) > 0 {
824+ for platform , r := range rr .Refs {
825+ st , err := r .ToState ()
826+ if err != nil {
827+ return err
828+ }
829+ so .FrontendInputs [k + "::" + platform ] = st
830+ so .FrontendAttrs [v + "::" + platform ] = "input:" + k + "::" + platform
831+ metadata := make (map [string ][]byte )
832+ if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey + "/" + platform ]; ok {
833+ metadata [exptypes .ExporterImageConfigKey ] = dt
834+ }
835+ if dt , ok := rr .Metadata ["containerimage.buildinfo/" + platform ]; ok {
836+ metadata ["containerimage.buildinfo" ] = dt
837+ }
838+ if len (metadata ) > 0 {
839+ dt , err := json .Marshal (metadata )
840+ if err != nil {
841+ return err
842+ }
843+ so .FrontendAttrs ["input-metadata:" + k + "::" + platform ] = string (dt )
844+ }
845+ }
846+ delete (so .FrontendAttrs , v )
847+ }
848+ if rr .Ref != nil {
849+ st , err := rr .Ref .ToState ()
821850 if err != nil {
822851 return err
823852 }
824- so .FrontendInputs [k + "::" + platform ] = st
825- so .FrontendAttrs [v + "::" + platform ] = "input:" + k + "::" + platform
853+ so .FrontendInputs [k ] = st
854+ so .FrontendAttrs [v ] = "input:" + k
826855 metadata := make (map [string ][]byte )
827- if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey + "/" + platform ]; ok {
856+ if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey ]; ok {
828857 metadata [exptypes .ExporterImageConfigKey ] = dt
829858 }
830- if dt , ok := rr .Metadata ["containerimage.buildinfo/" + platform ]; ok {
859+ if dt , ok := rr .Metadata ["containerimage.buildinfo" ]; ok {
831860 metadata ["containerimage.buildinfo" ] = dt
832861 }
833862 if len (metadata ) > 0 {
834863 dt , err := json .Marshal (metadata )
835864 if err != nil {
836865 return err
837866 }
838- so .FrontendAttrs ["input-metadata:" + k + "::" + platform ] = string (dt )
839- }
840- }
841- delete (so .FrontendAttrs , v )
842- }
843- if rr .Ref != nil {
844- st , err := rr .Ref .ToState ()
845- if err != nil {
846- return err
847- }
848- so .FrontendInputs [k ] = st
849- so .FrontendAttrs [v ] = "input:" + k
850- metadata := make (map [string ][]byte )
851- if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey ]; ok {
852- metadata [exptypes .ExporterImageConfigKey ] = dt
853- }
854- if dt , ok := rr .Metadata ["containerimage.buildinfo" ]; ok {
855- metadata ["containerimage.buildinfo" ] = dt
856- }
857- if len (metadata ) > 0 {
858- dt , err := json .Marshal (metadata )
859- if err != nil {
860- return err
867+ so .FrontendAttrs ["input-metadata:" + k ] = string (dt )
861868 }
862- so .FrontendAttrs ["input-metadata:" + k ] = string (dt )
863869 }
864870 }
865871 }
0 commit comments