Skip to content

Commit 016938b

Browse files
authored
Merge pull request moby#3858 from tonistiigi/llb-platform-fixes
llb: don't include platform in fileop proto
2 parents baffc1b + ad69ba0 commit 016938b

File tree

4 files changed

+74
-7
lines changed

4 files changed

+74
-7
lines changed

client/llb/diff.go

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

client/llb/fileop.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,7 @@ func (f *FileOp) Marshal(ctx context.Context, c *Constraints) (digest.Digest, []
724724
}
725725

726726
pop, md := MarshalConstraints(c, &f.constraints)
727+
pop.Platform = nil // file op is not platform specific
727728
pop.Op = &pb.Op_File{
728729
File: pfo,
729730
}

client/llb/merge.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,5 +117,5 @@ func Merge(inputs []State, opts ...ConstraintsOpt) State {
117117
o.SetConstraintsOption(&c)
118118
}
119119
addCap(&c, pb.CapMergeOp)
120-
return NewState(NewMerge(filteredInputs, c).Output())
120+
return filteredInputs[0].WithOutput(NewMerge(filteredInputs, c).Output())
121121
}

client/llb/state_test.go

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,27 +144,35 @@ func TestPlatformFromImage(t *testing.T) {
144144

145145
s := Image("srcimage", LinuxS390x).
146146
Run(Args([]string{"foo"})).
147-
File(Mkdir("/foo", 0700).Mkfile("/bar", 0600, []byte("bar")))
147+
File(Mkdir("/foo", 0700).Mkfile("/bar", 0600, []byte("bar"))).
148+
Run(Args([]string{"afterfile"})).Root()
148149

149-
dest := Image("destimage").File(Copy(s, "/", "/"))
150+
dest := Image("destimage").File(Copy(s, "/", "/")).Run(Args([]string{"afterfile"}))
150151

151152
def, err := dest.Marshal(context.TODO(), LinuxPpc64le)
152153
require.NoError(t, err)
153154

154155
m, arr := parseDef(t, def.Def)
155156
_ = m
156-
require.Equal(t, 6, len(arr))
157+
require.Equal(t, 8, len(arr))
157158

158159
dgst, idx := last(t, arr)
159160
require.Equal(t, 0, idx)
160161

161162
vtx, ok := m[dgst]
162163
require.Equal(t, true, ok)
163164

165+
_, ok = vtx.Op.(*pb.Op_Exec)
166+
require.Equal(t, true, ok)
167+
require.Equal(t, "ppc64le", vtx.Platform.Architecture)
168+
169+
vtx, ok = m[vtx.Inputs[0].Digest]
170+
require.Equal(t, true, ok)
171+
164172
f, ok := vtx.Op.(*pb.Op_File)
165173
require.Equal(t, true, ok)
166174
require.Equal(t, 1, len(f.File.Actions))
167-
require.Equal(t, "ppc64le", vtx.Platform.Architecture)
175+
require.Nil(t, vtx.Platform)
168176

169177
mainVtx := vtx
170178
vtx, ok = m[vtx.Inputs[0].Digest]
@@ -178,10 +186,17 @@ func TestPlatformFromImage(t *testing.T) {
178186
vtx, ok = m[mainVtx.Inputs[1].Digest]
179187
require.Equal(t, true, ok)
180188

189+
_, ok = vtx.Op.(*pb.Op_Exec)
190+
require.Equal(t, true, ok)
191+
require.Equal(t, "s390x", vtx.Platform.Architecture)
192+
193+
vtx, ok = m[vtx.Inputs[0].Digest]
194+
require.Equal(t, true, ok)
195+
181196
f, ok = vtx.Op.(*pb.Op_File)
182197
require.Equal(t, true, ok)
183198
require.Equal(t, 2, len(f.File.Actions))
184-
require.Equal(t, "s390x", vtx.Platform.Architecture)
199+
require.Nil(t, vtx.Platform)
185200

186201
vtx, ok = m[vtx.Inputs[0].Digest]
187202
require.Equal(t, true, ok)
@@ -199,6 +214,57 @@ func TestPlatformFromImage(t *testing.T) {
199214
require.Equal(t, "s390x", vtx.Platform.Architecture)
200215
}
201216

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+
239+
_, ok = vtx.Op.(*pb.Op_Exec)
240+
require.Equal(t, true, ok)
241+
require.Equal(t, "s390x", vtx.Platform.Architecture)
242+
243+
vtx, ok = m[vtx.Inputs[0].Digest]
244+
require.Equal(t, true, ok)
245+
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)
255+
require.Equal(t, true, ok)
256+
require.Equal(t, "docker-image://docker.io/library/srcimage:latest", src.Source.Identifier)
257+
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)
266+
}
267+
202268
func getEnvHelper(t *testing.T, s State, k string) (string, bool) {
203269
t.Helper()
204270
v, ok, err := s.GetEnv(context.TODO(), k)

0 commit comments

Comments
 (0)