github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/builder/builder-next/exporter/overrides/wrapper.go (about)

     1  package overrides
     2  
     3  import (
     4  	"context"
     5  	"strings"
     6  
     7  	"github.com/moby/buildkit/exporter"
     8  	"github.com/moby/buildkit/exporter/containerimage/exptypes"
     9  )
    10  
    11  // Wraps the containerimage exporter's Resolve method to apply moby-specific
    12  // overrides to the exporter attributes.
    13  type imageExporterMobyWrapper struct {
    14  	exp exporter.Exporter
    15  }
    16  
    17  func NewExporterWrapper(exp exporter.Exporter) (exporter.Exporter, error) {
    18  	return &imageExporterMobyWrapper{exp: exp}, nil
    19  }
    20  
    21  // Resolve applies moby specific attributes to the request.
    22  func (e *imageExporterMobyWrapper) Resolve(ctx context.Context, exporterAttrs map[string]string) (exporter.ExporterInstance, error) {
    23  	if exporterAttrs == nil {
    24  		exporterAttrs = make(map[string]string)
    25  	}
    26  	reposAndTags, err := SanitizeRepoAndTags(strings.Split(exporterAttrs[string(exptypes.OptKeyName)], ","))
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  	exporterAttrs[string(exptypes.OptKeyName)] = strings.Join(reposAndTags, ",")
    31  	exporterAttrs[string(exptypes.OptKeyUnpack)] = "true"
    32  	if _, has := exporterAttrs[string(exptypes.OptKeyDanglingPrefix)]; !has {
    33  		exporterAttrs[string(exptypes.OptKeyDanglingPrefix)] = "moby-dangling"
    34  	}
    35  
    36  	return e.exp.Resolve(ctx, exporterAttrs)
    37  }