Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import (
"github.com/moby/buildkit/session/sshforward/sshprovider"
"github.com/moby/buildkit/solver/errdefs"
"github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/solver/result"
"github.com/moby/buildkit/util/attestation"
binfotypes "github.com/moby/buildkit/util/buildinfo/types"
"github.com/moby/buildkit/util/contentutil"
Expand Down Expand Up @@ -6377,23 +6378,25 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) {
if err != nil {
return nil, err
}
res.AddInTotoAttestation(pk, &attestation.InTotoAttestation{
PredicatePath: "/attestation.json",
PredicateType: "https://example.com/attestations/v1.0",
Subjects: []attestation.InTotoSubject{
&attestation.InTotoSubjectSelf{},
res.AddAttestation(pk, &result.InTotoAttestation{
PredicateRefKey: "foo",
PredicatePath: "/attestation.json",
PredicateType: "https://example.com/attestations/v1.0",
Subjects: []result.InTotoSubject{
&result.InTotoSubjectSelf{},
},
}, refAttest)
res.AddInTotoAttestation(pk, &attestation.InTotoAttestation{
PredicatePath: "/attestation2.json",
PredicateType: "https://example.com/attestations2/v1.0",
Subjects: []attestation.InTotoSubject{
&attestation.InTotoSubjectRaw{
}, map[string]gateway.Reference{"foo": refAttest})
res.AddAttestation(pk, &result.InTotoAttestation{
PredicateRefKey: "bar",
PredicatePath: "/attestation2.json",
PredicateType: "https://example.com/attestations2/v1.0",
Subjects: []result.InTotoSubject{
&result.InTotoSubjectRaw{
Name: "/attestation.json",
Digest: []digest.Digest{successDigest},
},
},
}, refAttest)
}, map[string]gateway.Reference{"bar": refAttest})
}

dt, err := json.Marshal(expPlatforms)
Expand Down
6 changes: 3 additions & 3 deletions exporter/containerimage/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ func (e *imageExporterInstance) Config() exporter.Config {
}
}

func (e *imageExporterInstance) Export(ctx context.Context, src exporter.Source, sessionID string) (map[string]string, error) {
func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, sessionID string) (map[string]string, error) {
if src.Metadata == nil {
src.Metadata = make(map[string][]byte)
}
Expand Down Expand Up @@ -324,7 +324,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src exporter.Source,
return resp, nil
}

func (e *imageExporterInstance) pushImage(ctx context.Context, src exporter.Source, sessionID string, targetName string, dgst digest.Digest) error {
func (e *imageExporterInstance) pushImage(ctx context.Context, src *exporter.Source, sessionID string, targetName string, dgst digest.Digest) error {
annotations := map[digest.Digest]map[string]string{}
mprovider := contentutil.NewMultiProvider(e.opt.ImageWriter.ContentStore())
if src.Ref != nil {
Expand Down Expand Up @@ -355,7 +355,7 @@ func (e *imageExporterInstance) pushImage(ctx context.Context, src exporter.Sour
return push.Push(ctx, e.opt.SessionManager, sessionID, mprovider, e.opt.ImageWriter.ContentStore(), dgst, targetName, e.insecure, e.opt.RegistryHosts, e.pushByDigest, annotations)
}

func (e *imageExporterInstance) unpackImage(ctx context.Context, img images.Image, src exporter.Source, s session.Group) (err0 error) {
func (e *imageExporterInstance) unpackImage(ctx context.Context, img images.Image, src *exporter.Source, s session.Group) (err0 error) {
unpackDone := progress.OneOff(ctx, "unpacking to "+img.Name)
defer func() {
unpackDone(err0)
Expand Down
13 changes: 7 additions & 6 deletions exporter/containerimage/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/moby/buildkit/session"
"github.com/moby/buildkit/snapshot"
"github.com/moby/buildkit/solver"
"github.com/moby/buildkit/solver/result"
"github.com/moby/buildkit/util/attestation"
"github.com/moby/buildkit/util/bklog"
"github.com/moby/buildkit/util/buildinfo"
Expand Down Expand Up @@ -54,7 +55,7 @@ type ImageWriter struct {
opt WriterOpt
}

func (ic *ImageWriter) Commit(ctx context.Context, inp exporter.Source, sessionID string, opts *ImageCommitOpts) (*ocispecs.Descriptor, error) {
func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, sessionID string, opts *ImageCommitOpts) (*ocispecs.Descriptor, error) {
platformsBytes, ok := inp.Metadata[exptypes.ExporterPlatformsKey]

if len(inp.Refs) > 0 && !ok {
Expand Down Expand Up @@ -248,7 +249,7 @@ func (ic *ImageWriter) exportLayers(ctx context.Context, refCfg cacheconfig.RefC
return out, err
}

func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, desc *ocispecs.Descriptor, refs map[string]cache.ImmutableRef, attestations []attestation.Attestation) ([]intoto.Statement, error) {
func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, desc *ocispecs.Descriptor, refs map[string]cache.ImmutableRef, attestations []result.Attestation) ([]intoto.Statement, error) {
eg, ctx := errgroup.WithContext(ctx)
statements := make([]intoto.Statement, len(attestations))

Expand All @@ -260,7 +261,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group,
i, att := i, att
eg.Go(func() error {
switch att := att.(type) {
case *attestation.InTotoAttestation:
case *result.InTotoAttestation:
ref, ok := refs[att.PredicateRefKey]
if !ok {
return errors.Errorf("key %s not found in refs map", att.PredicateRefKey)
Expand Down Expand Up @@ -293,12 +294,12 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group,
}
for _, subject := range att.Subjects {
switch subject2 := subject.(type) {
case *attestation.InTotoSubjectSelf:
case *result.InTotoSubjectSelf:
statements[i].Subject = append(statements[i].Subject, intoto.Subject{
Name: "_",
Digest: attestation.DigestToDigestMap(desc.Digest),
Digest: result.DigestToDigestMap(desc.Digest),
})
case *attestation.InTotoSubjectRaw:
case *result.InTotoSubjectRaw:
statements[i].Subject = append(statements[i].Subject, intoto.Subject{
Name: subject2.Name,
Digest: subject2.DigestMap(),
Expand Down
13 changes: 4 additions & 9 deletions exporter/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,22 @@ import (
"context"

"github.com/moby/buildkit/cache"
"github.com/moby/buildkit/util/attestation"
"github.com/moby/buildkit/solver/result"
"github.com/moby/buildkit/util/compression"
)

type Source = result.Result[cache.ImmutableRef]

type Exporter interface {
Resolve(context.Context, map[string]string) (ExporterInstance, error)
}

type ExporterInstance interface {
Name() string
Config() Config
Export(ctx context.Context, src Source, sessionID string) (map[string]string, error)
Export(ctx context.Context, src *Source, sessionID string) (map[string]string, error)
}

type Config struct {
Compression compression.Config
}

type Source struct {
Ref cache.ImmutableRef
Refs map[string]cache.ImmutableRef
Metadata map[string][]byte
Attestations map[string][]attestation.Attestation
}
2 changes: 1 addition & 1 deletion exporter/local/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (e *localExporter) Config() exporter.Config {
return exporter.Config{}
}

func (e *localExporterInstance) Export(ctx context.Context, inp exporter.Source, sessionID string) (map[string]string, error) {
func (e *localExporterInstance) Export(ctx context.Context, inp *exporter.Source, sessionID string) (map[string]string, error) {
timeoutCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()

Expand Down
2 changes: 1 addition & 1 deletion exporter/oci/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func (e *imageExporterInstance) Config() exporter.Config {
}
}

func (e *imageExporterInstance) Export(ctx context.Context, src exporter.Source, sessionID string) (map[string]string, error) {
func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, sessionID string) (map[string]string, error) {
if e.opt.Variant == VariantDocker && len(src.Refs) > 0 {
return nil, errors.Errorf("docker exporter does not currently support exporting manifest lists")
}
Expand Down
2 changes: 1 addition & 1 deletion exporter/tar/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (e *localExporterInstance) Config() exporter.Config {
return exporter.Config{}
}

func (e *localExporterInstance) Export(ctx context.Context, inp exporter.Source, sessionID string) (map[string]string, error) {
func (e *localExporterInstance) Export(ctx context.Context, inp *exporter.Source, sessionID string) (map[string]string, error) {
var defers []func()

defer func() {
Expand Down
4 changes: 4 additions & 0 deletions frontend/frontend.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ import (
"github.com/moby/buildkit/client/llb"
gw "github.com/moby/buildkit/frontend/gateway/client"
"github.com/moby/buildkit/session"
"github.com/moby/buildkit/solver"
"github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/solver/result"
digest "github.com/opencontainers/go-digest"
)

type Result = result.Result[solver.ResultProxy]

type Frontend interface {
Solve(ctx context.Context, llb FrontendLLBBridge, opt map[string]string, inputs map[string]*pb.Definition, sid string, sm *session.Manager) (*Result, error)
}
Expand Down
9 changes: 9 additions & 0 deletions frontend/gateway/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,21 @@ import (

"github.com/moby/buildkit/client/llb"
"github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/solver/result"
"github.com/moby/buildkit/util/apicaps"
digest "github.com/opencontainers/go-digest"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
fstypes "github.com/tonistiigi/fsutil/types"
)

type Result = result.Result[Reference]

type BuildFunc func(context.Context, Client) (*Result, error)

func NewResult() *Result {
return &Result{}
}

type Client interface {
Solve(ctx context.Context, req SolveRequest) (*Result, error)
ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (digest.Digest, []byte, error)
Expand Down
68 changes: 0 additions & 68 deletions frontend/gateway/client/result.go

This file was deleted.

43 changes: 12 additions & 31 deletions frontend/gateway/forwarder/forward.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/moby/buildkit/solver/errdefs"
llberrdefs "github.com/moby/buildkit/solver/llbsolver/errdefs"
opspb "github.com/moby/buildkit/solver/pb"
"github.com/moby/buildkit/solver/result"
"github.com/moby/buildkit/util/apicaps"
"github.com/moby/buildkit/worker"
digest "github.com/opencontainers/go-digest"
Expand Down Expand Up @@ -66,27 +67,19 @@ func (c *bridgeClient) Solve(ctx context.Context, req client.SolveRequest) (*cli
return nil, c.wrapSolveError(err)
}

cRes := &client.Result{}
c.mu.Lock()
for k, r := range res.Refs {
cRes, err := result.ConvertResult(res, func(r solver.ResultProxy) (client.Reference, error) {
rr, err := c.newRef(r, session.NewGroup(c.sid))
if err != nil {
return nil, err
}
c.refs = append(c.refs, rr)
cRes.AddRef(k, rr)
}
if r := res.Ref; r != nil {
rr, err := c.newRef(r, session.NewGroup(c.sid))
if err != nil {
return nil, err
}
c.refs = append(c.refs, rr)
cRes.SetRef(rr)
}
return rr, nil
})
c.mu.Unlock()
cRes.Metadata = res.Metadata
cRes.Attestations = res.Attestations
if err != nil {
return nil, err
}

return cRes, nil
}
Expand Down Expand Up @@ -185,28 +178,16 @@ func (c *bridgeClient) toFrontendResult(r *client.Result) (*frontend.Result, err
return nil, nil
}

res := &frontend.Result{}

if r.Refs != nil {
res.Refs = make(map[string]solver.ResultProxy, len(r.Refs))
for k, r := range r.Refs {
rr, ok := r.(*ref)
if !ok {
return nil, errors.Errorf("invalid reference type for forward %T", r)
}
res.Refs[k] = rr.acquireResultProxy()
}
}
if r := r.Ref; r != nil {
res, err := result.ConvertResult(r, func(r client.Reference) (solver.ResultProxy, error) {
rr, ok := r.(*ref)
if !ok {
return nil, errors.Errorf("invalid reference type for forward %T", r)
}
res.Ref = rr.acquireResultProxy()
return rr.acquireResultProxy(), nil
})
if err != nil {
return nil, err
}
res.Metadata = r.Metadata
res.Attestations = r.Attestations

return res, nil
}

Expand Down
Loading