Skip to content

Commit f8c6a97

Browse files
committed
build: fix multiple named contexts pointing to same bake target
Contexts using target: schema are replaced by input: pointing to previous build result before build request is sent. Currently this replacement did not work if multiple contexts pointed to the same target name. Signed-off-by: Tonis Tiigi <[email protected]>
1 parent d4f088e commit f8c6a97

File tree

1 file changed

+37
-34
lines changed

1 file changed

+37
-34
lines changed

build/build.go

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -782,11 +782,11 @@ func calculateChildTargets(reqs map[string][]*reqForNode, opt map[string]Options
782782
}
783783

784784
func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *client.SolveOpt) error {
785-
m := map[string]string{}
785+
m := map[string][]string{}
786786
for k, v := range so.FrontendAttrs {
787787
if strings.HasPrefix(k, "context:") && strings.HasPrefix(v, "target:") {
788788
target := resultKey(index, strings.TrimPrefix(v, "target:"))
789-
m[target] = k
789+
m[target] = append(m[target], k)
790790
}
791791
}
792792
if len(m) == 0 {
@@ -801,7 +801,7 @@ func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *c
801801
return err
802802
}
803803

804-
for k, v := range m {
804+
for k, contexts := range m {
805805
r, ok := res[k]
806806
if !ok {
807807
continue
@@ -816,51 +816,54 @@ func waitContextDeps(ctx context.Context, index int, results *waitmap.Map, so *c
816816
if so.FrontendInputs == nil {
817817
so.FrontendInputs = map[string]llb.State{}
818818
}
819-
if len(rr.Refs) > 0 {
820-
for platform, r := range rr.Refs {
821-
st, err := r.ToState()
819+
820+
for _, v := range contexts {
821+
if len(rr.Refs) > 0 {
822+
for platform, r := range rr.Refs {
823+
st, err := r.ToState()
824+
if err != nil {
825+
return err
826+
}
827+
so.FrontendInputs[k+"::"+platform] = st
828+
so.FrontendAttrs[v+"::"+platform] = "input:" + k + "::" + platform
829+
metadata := make(map[string][]byte)
830+
if dt, ok := rr.Metadata[exptypes.ExporterImageConfigKey+"/"+platform]; ok {
831+
metadata[exptypes.ExporterImageConfigKey] = dt
832+
}
833+
if dt, ok := rr.Metadata["containerimage.buildinfo/"+platform]; ok {
834+
metadata["containerimage.buildinfo"] = dt
835+
}
836+
if len(metadata) > 0 {
837+
dt, err := json.Marshal(metadata)
838+
if err != nil {
839+
return err
840+
}
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()
822848
if err != nil {
823849
return err
824850
}
825-
so.FrontendInputs[k+"::"+platform] = st
826-
so.FrontendAttrs[v+"::"+platform] = "input:" + k + "::" + platform
851+
so.FrontendInputs[k] = st
852+
so.FrontendAttrs[v] = "input:" + k
827853
metadata := make(map[string][]byte)
828-
if dt, ok := rr.Metadata[exptypes.ExporterImageConfigKey+"/"+platform]; ok {
854+
if dt, ok := rr.Metadata[exptypes.ExporterImageConfigKey]; ok {
829855
metadata[exptypes.ExporterImageConfigKey] = dt
830856
}
831-
if dt, ok := rr.Metadata["containerimage.buildinfo/"+platform]; ok {
857+
if dt, ok := rr.Metadata["containerimage.buildinfo"]; ok {
832858
metadata["containerimage.buildinfo"] = dt
833859
}
834860
if len(metadata) > 0 {
835861
dt, err := json.Marshal(metadata)
836862
if err != nil {
837863
return err
838864
}
839-
so.FrontendAttrs["input-metadata:"+k+"::"+platform] = string(dt)
840-
}
841-
}
842-
delete(so.FrontendAttrs, v)
843-
}
844-
if rr.Ref != nil {
845-
st, err := rr.Ref.ToState()
846-
if err != nil {
847-
return err
848-
}
849-
so.FrontendInputs[k] = st
850-
so.FrontendAttrs[v] = "input:" + k
851-
metadata := make(map[string][]byte)
852-
if dt, ok := rr.Metadata[exptypes.ExporterImageConfigKey]; ok {
853-
metadata[exptypes.ExporterImageConfigKey] = dt
854-
}
855-
if dt, ok := rr.Metadata["containerimage.buildinfo"]; ok {
856-
metadata["containerimage.buildinfo"] = dt
857-
}
858-
if len(metadata) > 0 {
859-
dt, err := json.Marshal(metadata)
860-
if err != nil {
861-
return err
865+
so.FrontendAttrs["input-metadata:"+k] = string(dt)
862866
}
863-
so.FrontendAttrs["input-metadata:"+k] = string(dt)
864867
}
865868
}
866869
}

0 commit comments

Comments
 (0)