Skip to content

Commit ad69ba0

Browse files
committed
llb: carry platform from inputs for merge/diff
Signed-off-by: Tonis Tiigi <[email protected]>
1 parent e6eea2c commit ad69ba0

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

client/llb/diff.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,5 @@ func Diff(lower, upper State, opts ...ConstraintsOpt) State {
104104
for _, o := range opts {
105105
o.SetConstraintsOption(&c)
106106
}
107-
return NewState(NewDiff(lower, upper, c).Output())
107+
return lower.WithOutput(NewDiff(lower, upper, c).Output())
108108
}

client/llb/merge.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,5 +92,5 @@ func Merge(inputs []State, opts ...ConstraintsOpt) State {
9292
o.SetConstraintsOption(&c)
9393
}
9494
addCap(&c, pb.CapMergeOp)
95-
return NewState(NewMerge(filteredInputs, c).Output())
95+
return filteredInputs[0].WithOutput(NewMerge(filteredInputs, c).Output())
9696
}

client/llb/state_test.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,17 +213,56 @@ func TestPlatformFromImage(t *testing.T) {
213213
require.Equal(t, "docker-image://docker.io/library/srcimage:latest", src.Source.Identifier)
214214
require.Equal(t, "s390x", vtx.Platform.Architecture)
215215
}
216+
217+
func TestPlatformFromImageWithMerge(t *testing.T) {
218+
t.Parallel()
219+
220+
s := Image("srcimage", LinuxS390x)
221+
222+
s2 := Scratch().File(Mkdir("/foo", 0700).Mkfile("/bar", 0600, []byte("bar")))
223+
224+
dest := Merge([]State{s, s2}).Run(Args([]string{"aftermerge"}))
225+
226+
def, err := dest.Marshal(context.TODO(), LinuxPpc64le)
227+
require.NoError(t, err)
228+
229+
m, arr := parseDef(t, def.Def)
230+
_ = m
231+
require.Equal(t, 5, len(arr))
232+
233+
dgst, idx := last(t, arr)
234+
require.Equal(t, 0, idx)
235+
236+
vtx, ok := m[dgst]
237+
require.Equal(t, true, ok)
238+
216239
_, ok = vtx.Op.(*pb.Op_Exec)
217240
require.Equal(t, true, ok)
218241
require.Equal(t, "s390x", vtx.Platform.Architecture)
219242

220243
vtx, ok = m[vtx.Inputs[0].Digest]
221244
require.Equal(t, true, ok)
222245

223-
src, ok = vtx.Op.(*pb.Op_Source)
246+
_, ok = vtx.Op.(*pb.Op_Merge)
247+
require.Equal(t, true, ok)
248+
require.Nil(t, vtx.Platform)
249+
250+
mainVtx := vtx
251+
vtx, ok = m[vtx.Inputs[0].Digest]
252+
require.Equal(t, true, ok)
253+
254+
src, ok := vtx.Op.(*pb.Op_Source)
224255
require.Equal(t, true, ok)
225256
require.Equal(t, "docker-image://docker.io/library/srcimage:latest", src.Source.Identifier)
226257
require.Equal(t, "s390x", vtx.Platform.Architecture)
258+
259+
vtx, ok = m[mainVtx.Inputs[1].Digest]
260+
require.Equal(t, true, ok)
261+
262+
f, ok := vtx.Op.(*pb.Op_File)
263+
require.Equal(t, true, ok)
264+
require.Equal(t, 2, len(f.File.Actions))
265+
require.Nil(t, vtx.Platform)
227266
}
228267

229268
func getEnvHelper(t *testing.T, s State, k string) (string, bool) {

0 commit comments

Comments
 (0)