Skip to content

Commit ca6d8c5

Browse files
committed
Whenever copying OCI Platform data, include OSVersion and OSFeatures
Trivially created by looking for every reference to .Variant and adding OSVersion and OSFeatures, except the ones related to the string representation of a Platform instance. I then went through and ensured every assignment of OSFeatures used the append-to-nil idiom to avoid sharing the slice storage after copying. Signed-off-by: Paul "TBBle" Hampson <[email protected]>
1 parent 36c5550 commit ca6d8c5

File tree

17 files changed

+67
-33
lines changed

17 files changed

+67
-33
lines changed

client/llb/marshal.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func MarshalConstraints(base, override *Constraints) (*pb.Op, *pb.OpMetadata) {
101101
Architecture: c.Platform.Architecture,
102102
Variant: c.Platform.Variant,
103103
OSVersion: c.Platform.OSVersion,
104-
OSFeatures: c.Platform.OSFeatures,
104+
OSFeatures: append([]string{}, c.Platform.OSFeatures...),
105105
},
106106
Constraints: &pb.WorkerConstraints{
107107
Filter: c.WorkerConstraints,

client/llb/state.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ func (s State) WithImageConfig(c []byte) (State, error) {
262262
OS: img.OS,
263263
Architecture: img.Architecture,
264264
Variant: img.Variant,
265+
OSVersion: img.OSVersion,
266+
OSFeatures: append([]string{}, img.OSFeatures...),
265267
})
266268
}
267269
return s, nil

exporter/containerimage/exptypes/parse.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func ParsePlatforms(meta map[string][]byte) (Platforms, error) {
3333
Architecture: img.Architecture,
3434
OS: img.OS,
3535
OSVersion: img.OSVersion,
36-
OSFeatures: img.OSFeatures,
36+
OSFeatures: append([]string{}, img.OSFeatures...),
3737
Variant: img.Variant,
3838
}
3939
}

exporter/containerimage/writer.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,8 @@ func defaultImageConfig() ([]byte, error) {
598598
img := ocispecs.Image{}
599599
img.Architecture = pl.Architecture
600600
img.OS = pl.OS
601+
img.OSVersion = pl.OSVersion
602+
img.OSFeatures = append([]string{}, pl.OSFeatures...)
601603
img.Variant = pl.Variant
602604
img.RootFS.Type = "layers"
603605
img.Config.WorkingDir = "/"
@@ -611,7 +613,7 @@ func attestationsConfig(layers []ocispecs.Descriptor) ([]byte, error) {
611613
img.Architecture = intotoPlatform.Architecture
612614
img.OS = intotoPlatform.OS
613615
img.OSVersion = intotoPlatform.OSVersion
614-
img.OSFeatures = intotoPlatform.OSFeatures
616+
img.OSFeatures = append([]string{}, intotoPlatform.OSFeatures...)
615617
img.Variant = intotoPlatform.Variant
616618
img.RootFS.Type = "layers"
617619
for _, layer := range layers {

frontend/dockerfile/dockerfile2llb/convert.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,8 @@ func toDispatchState(ctx context.Context, dt []byte, opt ConvertOpt) (*dispatchS
274274
OS: img.OS,
275275
Architecture: img.Architecture,
276276
Variant: img.Variant,
277+
OSVersion: img.OSVersion,
278+
OSFeatures: append([]string{}, img.OSFeatures...),
277279
}
278280
}
279281
}
@@ -595,6 +597,8 @@ func toDispatchState(ctx context.Context, dt []byte, opt ConvertOpt) (*dispatchS
595597
target.image.OS = platformOpt.targetPlatform.OS
596598
target.image.Architecture = platformOpt.targetPlatform.Architecture
597599
target.image.Variant = platformOpt.targetPlatform.Variant
600+
target.image.OSVersion = platformOpt.targetPlatform.OSVersion
601+
target.image.OSFeatures = append([]string{}, platformOpt.targetPlatform.OSFeatures...)
598602
}
599603

600604
return target, nil

frontend/dockerfile/dockerfile2llb/image.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ func emptyImage(platform ocispecs.Platform) image.Image {
1919
img := image.Image{}
2020
img.Architecture = platform.Architecture
2121
img.OS = platform.OS
22+
img.OSVersion = platform.OSVersion
23+
img.OSFeatures = append([]string{}, platform.OSFeatures...)
2224
img.Variant = platform.Variant
2325
img.RootFS.Type = "layers"
2426
img.Config.WorkingDir = "/"

frontend/dockerui/build.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (bc *Client) Build(ctx context.Context, fn BuildFunc) (*ResultBuilder, erro
5757
p.OSVersion = img.OSVersion
5858
}
5959
if p.OSFeatures == nil && len(img.OSFeatures) > 0 {
60-
p.OSFeatures = img.OSFeatures
60+
p.OSFeatures = append([]string{}, img.OSFeatures...)
6161
}
6262
}
6363

frontend/gateway/gateway.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ func (lbf *llbBridgeForwarder) ResolveImageConfig(ctx context.Context, req *pb.R
566566
Architecture: p.Architecture,
567567
Variant: p.Variant,
568568
OSVersion: p.OSVersion,
569-
OSFeatures: p.OSFeatures,
569+
OSFeatures: append([]string{}, p.OSFeatures...),
570570
}
571571
}
572572
ref, dgst, dt, err := lbf.llbBridge.ResolveImageConfig(ctx, req.Ref, llb.ResolveImageConfigOpt{

frontend/gateway/grpcclient/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ func (c *grpcClient) ResolveImageConfig(ctx context.Context, ref string, opt llb
486486
Architecture: platform.Architecture,
487487
Variant: platform.Variant,
488488
OSVersion: platform.OSVersion,
489-
OSFeatures: platform.OSFeatures,
489+
OSFeatures: append([]string{}, platform.OSFeatures...),
490490
}
491491
}
492492

solver/llbsolver/ops/exec.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ func (e *ExecOp) CacheMap(ctx context.Context, g session.Group, index int) (*sol
113113
OS: e.platform.OS,
114114
Architecture: e.platform.Architecture,
115115
Variant: e.platform.Variant,
116+
OSVersion: e.platform.OSVersion,
117+
OSFeatures: append([]string{}, e.platform.OSFeatures...),
116118
}
117119
}
118120

@@ -133,17 +135,21 @@ func (e *ExecOp) CacheMap(ctx context.Context, g session.Group, index int) (*sol
133135
}
134136

135137
dt, err := json.Marshal(struct {
136-
Type string
137-
Exec *pb.ExecOp
138-
OS string
139-
Arch string
140-
Variant string `json:",omitempty"`
138+
Type string
139+
Exec *pb.ExecOp
140+
OS string
141+
Arch string
142+
Variant string `json:",omitempty"`
143+
OSVersion string `json:",omitempty"`
144+
OSFeatures []string `json:",omitempty"`
141145
}{
142-
Type: execCacheType,
143-
Exec: &op,
144-
OS: p.OS,
145-
Arch: p.Architecture,
146-
Variant: p.Variant,
146+
Type: execCacheType,
147+
Exec: &op,
148+
OS: p.OS,
149+
Arch: p.Architecture,
150+
Variant: p.Variant,
151+
OSVersion: p.OSVersion,
152+
OSFeatures: append([]string{}, p.OSFeatures...),
147153
})
148154
if err != nil {
149155
return nil, false, err

0 commit comments

Comments
 (0)