diff --git a/exporter/containerimage/export.go b/exporter/containerimage/export.go index 27e58e7e2cd19..1412ebf46d740 100644 --- a/exporter/containerimage/export.go +++ b/exporter/containerimage/export.go @@ -190,10 +190,8 @@ func (e *imageExporterInstance) Name() string { return "exporting to image" } -func (e *imageExporterInstance) Config() exporter.Config { - return exporter.Config{ - Compression: e.opts.RefCfg.Compression, - } +func (e *imageExporterInstance) Config() *exporter.Config { + return exporter.NewConfigWithCompression(e.opts.RefCfg.Compression) } func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, sessionID string) (map[string]string, error) { diff --git a/exporter/exporter.go b/exporter/exporter.go index 284cb5615b944..967d06c1af872 100644 --- a/exporter/exporter.go +++ b/exporter/exporter.go @@ -16,10 +16,29 @@ type Exporter interface { type ExporterInstance interface { Name() string - Config() Config + Config() *Config Export(ctx context.Context, src *Source, sessionID string) (map[string]string, error) } type Config struct { - Compression compression.Config + // Make the field private in case it is initialized with nil compression.Type + compression compression.Config +} + +func NewConfig() *Config { + return &Config{ + compression: compression.Config{ + Type: compression.Default, + }, + } +} + +func NewConfigWithCompression(comp compression.Config) *Config { + return &Config{ + compression: comp, + } +} + +func (c *Config) Compression() compression.Config { + return c.compression } diff --git a/exporter/local/export.go b/exporter/local/export.go index fbd727d87a218..fa610c255646e 100644 --- a/exporter/local/export.go +++ b/exporter/local/export.go @@ -48,8 +48,8 @@ func (e *localExporterInstance) Name() string { return "exporting to client" } -func (e *localExporter) Config() exporter.Config { - return exporter.Config{} +func (e *localExporter) Config() *exporter.Config { + return exporter.NewConfig() } func (e *localExporterInstance) Export(ctx context.Context, inp *exporter.Source, sessionID string) (map[string]string, error) { diff --git a/exporter/oci/export.go b/exporter/oci/export.go index 1a92cd1a399ca..160f2d8cc2892 100644 --- a/exporter/oci/export.go +++ b/exporter/oci/export.go @@ -86,10 +86,8 @@ func (e *imageExporterInstance) Name() string { return "exporting to oci image format" } -func (e *imageExporterInstance) Config() exporter.Config { - return exporter.Config{ - Compression: e.opts.RefCfg.Compression, - } +func (e *imageExporterInstance) Config() *exporter.Config { + return exporter.NewConfigWithCompression(e.opts.RefCfg.Compression) } func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, sessionID string) (map[string]string, error) { diff --git a/exporter/tar/export.go b/exporter/tar/export.go index 82af4404f8a17..9edb69d87dae2 100644 --- a/exporter/tar/export.go +++ b/exporter/tar/export.go @@ -66,8 +66,8 @@ func (e *localExporterInstance) Name() string { return "exporting to client" } -func (e *localExporterInstance) Config() exporter.Config { - return exporter.Config{} +func (e *localExporterInstance) Config() *exporter.Config { + return exporter.NewConfig() } func (e *localExporterInstance) Export(ctx context.Context, inp *exporter.Source, sessionID string) (map[string]string, error) { diff --git a/solver/llbsolver/solver.go b/solver/llbsolver/solver.go index 5a87fc88e0e42..081b024cb7225 100644 --- a/solver/llbsolver/solver.go +++ b/solver/llbsolver/solver.go @@ -215,7 +215,7 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro if _, ok := asInlineCache(exp.CacheExporter); ok { if err := inBuilderContext(ctx, j, "preparing layers for inline cache", j.SessionID+"-cache-inline", func(ctx context.Context, _ session.Group) error { if cached.Ref != nil { - dtic, err := inlineCache(ctx, exp.CacheExporter, cached.Ref, e.Config().Compression, session.NewGroup(sessionID)) + dtic, err := inlineCache(ctx, exp.CacheExporter, cached.Ref, e.Config().Compression(), session.NewGroup(sessionID)) if err != nil { return err } @@ -224,7 +224,7 @@ func (s *Solver) Solve(ctx context.Context, id string, sessionID string, req fro } } for k, res := range cached.Refs { - dtic, err := inlineCache(ctx, exp.CacheExporter, res, e.Config().Compression, session.NewGroup(sessionID)) + dtic, err := inlineCache(ctx, exp.CacheExporter, res, e.Config().Compression(), session.NewGroup(sessionID)) if err != nil { return err }