diff --git a/exporter/containerimage/exptypes/parse.go b/exporter/containerimage/exptypes/parse.go index cd2256b566e9..4d2b02f5d0a0 100644 --- a/exporter/containerimage/exptypes/parse.go +++ b/exporter/containerimage/exptypes/parse.go @@ -32,7 +32,7 @@ func ParsePlatforms(meta map[string][]byte) (Platforms, error) { return ps, nil } - p := platforms.DefaultSpec() + var p ocispecs.Platform if imgConfig, ok := meta[ExporterImageConfigKey]; ok { var img ocispecs.Image err := json.Unmarshal(imgConfig, &img) @@ -51,6 +51,8 @@ func ParsePlatforms(meta map[string][]byte) (Platforms, error) { } else if img.OS != "" || img.Architecture != "" { return Platforms{}, errors.Errorf("invalid image config: os and architecture must be specified together") } + } else { + p = platforms.DefaultSpec() } p = platforms.Normalize(p) pk := platforms.FormatAll(p) diff --git a/frontend/dockerfile/builder/build.go b/frontend/dockerfile/builder/build.go index 62b76bd5e22e..ed5bccc0b242 100644 --- a/frontend/dockerfile/builder/build.go +++ b/frontend/dockerfile/builder/build.go @@ -156,9 +156,11 @@ func Build(ctx context.Context, c client.Client) (_ *client.Result, err error) { return nil, nil, nil, err } - p := platforms.DefaultSpec() + var p ocispecs.Platform if platform != nil { p = *platform + } else { + p = platforms.DefaultSpec() } scanTargets.Store(platforms.FormatAll(platforms.Normalize(p)), scanTarget) diff --git a/frontend/dockerui/build.go b/frontend/dockerui/build.go index cc93dfaf3676..8c64d990f2bd 100644 --- a/frontend/dockerui/build.go +++ b/frontend/dockerui/build.go @@ -54,9 +54,11 @@ func (bc *Client) Build(ctx context.Context, fn BuildFunc) (*ResultBuilder, erro } } - p := platforms.DefaultSpec() + var p ocispecs.Platform if tp != nil { p = *tp + } else { + p = platforms.DefaultSpec() } // in certain conditions we allow input platform to be extended from base image diff --git a/frontend/dockerui/config.go b/frontend/dockerui/config.go index ee8a2667548d..e16c6e0502bd 100644 --- a/frontend/dockerui/config.go +++ b/frontend/dockerui/config.go @@ -148,9 +148,11 @@ func (bc *Client) BuildOpts() client.BuildOpts { func (bc *Client) init() error { opts := bc.bopts.Opts - defaultBuildPlatform := platforms.Normalize(platforms.DefaultSpec()) + var defaultBuildPlatform ocispecs.Platform if workers := bc.bopts.Workers; len(workers) > 0 && len(workers[0].Platforms) > 0 { defaultBuildPlatform = workers[0].Platforms[0] + } else { + defaultBuildPlatform = platforms.Normalize(platforms.DefaultSpec()) } buildPlatforms := []ocispecs.Platform{defaultBuildPlatform} targetPlatforms := []ocispecs.Platform{} @@ -459,9 +461,11 @@ func (bc *Client) NamedContext(name string, opt ContextOpt) (*NamedContext, erro } name = strings.TrimSuffix(reference.FamiliarString(named), ":latest") - pp := platforms.DefaultSpec() + var pp ocispecs.Platform if opt.Platform != nil { pp = *opt.Platform + } else { + pp = platforms.DefaultSpec() } pname := name + "::" + platforms.FormatAll(platforms.Normalize(pp)) nc, err := bc.namedContext(name, pname, opt) diff --git a/solver/llbsolver/ops/exec.go b/solver/llbsolver/ops/exec.go index ed5b87ea8182..1f6590bcfe19 100644 --- a/solver/llbsolver/ops/exec.go +++ b/solver/llbsolver/ops/exec.go @@ -123,7 +123,7 @@ func (e *ExecOp) CacheMap(ctx context.Context, g session.Group, index int) (*sol } op.Meta.ProxyEnv = nil - p := platforms.DefaultSpec() + var p ocispecs.Platform if e.platform != nil { p = ocispecs.Platform{ OS: e.platform.OS, @@ -132,6 +132,8 @@ func (e *ExecOp) CacheMap(ctx context.Context, g session.Group, index int) (*sol OSVersion: e.platform.OSVersion, OSFeatures: e.platform.OSFeatures, } + } else { + p = platforms.DefaultSpec() } // Special case for cache compatibility with buggy versions that wrongly diff --git a/source/containerimage/source.go b/source/containerimage/source.go index ceaa0f2551ee..9c0e2c4b2953 100644 --- a/source/containerimage/source.go +++ b/source/containerimage/source.go @@ -85,7 +85,7 @@ func (is *Source) Identifier(scheme, ref string, attrs map[string]string, platfo func (is *Source) Resolve(ctx context.Context, id source.Identifier, sm *session.Manager, vtx solver.Vertex) (source.SourceInstance, error) { var ( p *puller - platform = platforms.DefaultSpec() + platform ocispecs.Platform pullerUtil *pull.Puller mode resolver.ResolveMode recordType client.UsageRecordType @@ -126,6 +126,10 @@ func (is *Source) Resolve(ctx context.Context, id source.Identifier, sm *session default: return nil, errors.Errorf("unknown resolver type: %v", is.ResolverType) } + + if &platform == nil { + platform = platforms.DefaultSpec() + } pullerUtil = &pull.Puller{ ContentStore: is.ContentStore, Platform: platform,