@@ -784,11 +784,11 @@ func calculateChildTargets(reqs map[string][]*reqForNode, opt map[string]Options
784784}
785785
786786func waitContextDeps (ctx context.Context , index int , results * waitmap.Map , so * client.SolveOpt ) error {
787- m := map [string ]string {}
787+ m := map [string ][] string {}
788788 for k , v := range so .FrontendAttrs {
789789 if strings .HasPrefix (k , "context:" ) && strings .HasPrefix (v , "target:" ) {
790790 target := resultKey (index , strings .TrimPrefix (v , "target:" ))
791- m [target ] = k
791+ m [target ] = append ( m [ target ], k )
792792 }
793793 }
794794 if len (m ) == 0 {
@@ -803,7 +803,7 @@ func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *c
803803 return err
804804 }
805805
806- for k , v := range m {
806+ for k , contexts := range m {
807807 r , ok := res [k ]
808808 if ! ok {
809809 continue
@@ -818,51 +818,54 @@ func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *c
818818 if so .FrontendInputs == nil {
819819 so .FrontendInputs = map [string ]llb.State {}
820820 }
821- if len (rr .Refs ) > 0 {
822- for platform , r := range rr .Refs {
823- 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 ()
824850 if err != nil {
825851 return err
826852 }
827- so .FrontendInputs [k + "::" + platform ] = st
828- so .FrontendAttrs [v + "::" + platform ] = "input:" + k + "::" + platform
853+ so .FrontendInputs [k ] = st
854+ so .FrontendAttrs [v ] = "input:" + k
829855 metadata := make (map [string ][]byte )
830- if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey + "/" + platform ]; ok {
856+ if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey ]; ok {
831857 metadata [exptypes .ExporterImageConfigKey ] = dt
832858 }
833- if dt , ok := rr .Metadata ["containerimage.buildinfo/" + platform ]; ok {
859+ if dt , ok := rr .Metadata ["containerimage.buildinfo" ]; ok {
834860 metadata ["containerimage.buildinfo" ] = dt
835861 }
836862 if len (metadata ) > 0 {
837863 dt , err := json .Marshal (metadata )
838864 if err != nil {
839865 return err
840866 }
841- so .FrontendAttrs ["input-metadata:" + k + "::" + platform ] = string (dt )
842- }
843- }
844- delete (so .FrontendAttrs , v )
845- }
846- if rr .Ref != nil {
847- st , err := rr .Ref .ToState ()
848- if err != nil {
849- return err
850- }
851- so .FrontendInputs [k ] = st
852- so .FrontendAttrs [v ] = "input:" + k
853- metadata := make (map [string ][]byte )
854- if dt , ok := rr .Metadata [exptypes .ExporterImageConfigKey ]; ok {
855- metadata [exptypes .ExporterImageConfigKey ] = dt
856- }
857- if dt , ok := rr .Metadata ["containerimage.buildinfo" ]; ok {
858- metadata ["containerimage.buildinfo" ] = dt
859- }
860- if len (metadata ) > 0 {
861- dt , err := json .Marshal (metadata )
862- if err != nil {
863- return err
867+ so .FrontendAttrs ["input-metadata:" + k ] = string (dt )
864868 }
865- so .FrontendAttrs ["input-metadata:" + k ] = string (dt )
866869 }
867870 }
868871 }
0 commit comments