Skip to content

Commit

Permalink
Merge pull request #2550 from crazy-max/provenance-mode-commands
Browse files Browse the repository at this point in the history
build: read provenance response mode in commands pkg
  • Loading branch information
tonistiigi authored Jun 25, 2024
2 parents 076e19d + d155747 commit 6ef443d
Show file tree
Hide file tree
Showing 8 changed files with 161 additions and 146 deletions.
7 changes: 4 additions & 3 deletions build/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/distribution/reference"
"github.com/docker/buildx/builder"
"github.com/docker/buildx/driver"
"github.com/docker/buildx/util/confutil"
"github.com/docker/buildx/util/desktop"
"github.com/docker/buildx/util/dockerutil"
"github.com/docker/buildx/util/imagetools"
Expand Down Expand Up @@ -82,7 +83,7 @@ type Options struct {
Session []session.Attachable
Linked bool // Linked marks this target as exclusively linked (not requested by the user).
PrintFunc *PrintFunc
WithProvenanceResponse bool
ProvenanceResponseMode confutil.MetadataProvenanceMode
SourcePolicy *spb.Policy
GroupRef string
}
Expand Down Expand Up @@ -473,8 +474,8 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s
rr.ExporterResponse[k] = string(v)
}
rr.ExporterResponse["buildx.build.ref"] = buildRef
if opt.WithProvenanceResponse && node.Driver.HistoryAPISupported(ctx) {
if err := setRecordProvenance(ctx, c, rr, so.Ref, pw); err != nil {
if node.Driver.HistoryAPISupported(ctx) {
if err := setRecordProvenance(ctx, c, rr, so.Ref, opt.ProvenanceResponseMode, pw); err != nil {
return err
}
}
Expand Down
3 changes: 1 addition & 2 deletions build/provenance.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ type provenanceBuilder struct {
ID string `json:"id,omitempty"`
}

func setRecordProvenance(ctx context.Context, c *client.Client, sr *client.SolveResponse, ref string, pw progress.Writer) error {
mode := confutil.MetadataProvenance()
func setRecordProvenance(ctx context.Context, c *client.Client, sr *client.SolveResponse, ref string, mode confutil.MetadataProvenanceMode, pw progress.Writer) error {
if mode == confutil.MetadataProvenanceModeDisabled {
return nil
}
Expand Down
7 changes: 6 additions & 1 deletion commands/bake.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,12 +202,17 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba
return nil
}

prm := confutil.MetadataProvenance()
if len(in.metadataFile) == 0 {
prm = confutil.MetadataProvenanceModeDisabled
}

groupRef := identity.NewID()
var refs []string
for k, b := range bo {
b.Ref = identity.NewID()
b.GroupRef = groupRef
b.WithProvenanceResponse = len(in.metadataFile) > 0
b.ProvenanceResponseMode = prm
refs = append(refs, b.Ref)
bo[k] = b
}
Expand Down
6 changes: 5 additions & 1 deletion commands/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,11 @@ func (o *buildOptions) toControllerOptions() (*controllerapi.BuildOptions, error
return nil, err
}

opts.WithProvenanceResponse = opts.PrintFunc == nil && len(o.metadataFile) > 0
prm := confutil.MetadataProvenance()
if opts.PrintFunc != nil || len(o.metadataFile) == 0 {
prm = confutil.MetadataProvenanceModeDisabled
}
opts.ProvenanceResponseMode = string(prm)

return &opts, nil
}
Expand Down
2 changes: 1 addition & 1 deletion controller/build/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build
Target: in.Target,
Ulimits: controllerUlimitOpt2DockerUlimit(in.Ulimits),
GroupRef: in.GroupRef,
WithProvenanceResponse: in.WithProvenanceResponse,
ProvenanceResponseMode: confutil.ParseMetadataProvenance(in.ProvenanceResponseMode),
}

platforms, err := platformutil.Parse(in.Platforms)
Expand Down
256 changes: 128 additions & 128 deletions controller/pb/controller.pb.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion controller/pb/controller.proto
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ message BuildOptions {
string Ref = 29;
string GroupRef = 30;
repeated string Annotations = 31;
bool WithProvenanceResponse = 32;
string ProvenanceResponseMode = 32;
}

message ExportEntry {
Expand Down
24 changes: 15 additions & 9 deletions util/confutil/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,36 @@ import (
"strconv"
)

// MetadataProvenanceMode is the type for setting provenance in the metdata file
type MetadataProvenanceMode int
// MetadataProvenanceMode is the type for setting provenance in the metadata
// file
type MetadataProvenanceMode string

const (
// MetadataProvenanceModeMin sets minimal provenance (default)
MetadataProvenanceModeMin MetadataProvenanceMode = iota
MetadataProvenanceModeMin MetadataProvenanceMode = "min"
// MetadataProvenanceModeMax sets full provenance
MetadataProvenanceModeMax
MetadataProvenanceModeMax MetadataProvenanceMode = "max"
// MetadataProvenanceModeDisabled doesn't set provenance
MetadataProvenanceModeDisabled
MetadataProvenanceModeDisabled MetadataProvenanceMode = "disabled"
)

// MetadataProvenance returns the provenance mode to set in the metadata file
// MetadataProvenance returns the metadata provenance mode from
// BUILDX_METADATA_PROVENANCE environment variable
func MetadataProvenance() MetadataProvenanceMode {
bmp := os.Getenv("BUILDX_METADATA_PROVENANCE")
switch bmp {
return ParseMetadataProvenance(os.Getenv("BUILDX_METADATA_PROVENANCE"))
}

// ParseMetadataProvenance parses the metadata provenance mode from a string
func ParseMetadataProvenance(inp string) MetadataProvenanceMode {
switch inp {
case "min":
return MetadataProvenanceModeMin
case "max":
return MetadataProvenanceModeMax
case "disabled":
return MetadataProvenanceModeDisabled
}
if ok, err := strconv.ParseBool(bmp); err == nil && !ok {
if ok, err := strconv.ParseBool(inp); err == nil && !ok {
return MetadataProvenanceModeDisabled
}
return MetadataProvenanceModeMin
Expand Down

0 comments on commit 6ef443d

Please sign in to comment.