build: reuse build session for policy source resolution

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2026-03-04 17:21:20 +01:00
parent 08998a7e90
commit 2ed4ece865
3 changed files with 54 additions and 2 deletions
+17 -1
View File
@@ -3,6 +3,7 @@ package sourcemeta
import (
"context"
"errors"
"slices"
"sync"
"sync/atomic"
@@ -11,6 +12,7 @@ import (
"github.com/moby/buildkit/client/llb"
"github.com/moby/buildkit/client/llb/sourceresolver"
gwclient "github.com/moby/buildkit/frontend/gateway/client"
"github.com/moby/buildkit/session"
"github.com/moby/buildkit/solver/pb"
)
@@ -44,6 +46,7 @@ type Option func(*newResolverOpts)
type newResolverOpts struct {
progressWriter progress.Writer
session []session.Attachable
}
func WithProgressWriter(pw progress.Writer) Option {
@@ -52,6 +55,12 @@ func WithProgressWriter(pw progress.Writer) Option {
}
}
func WithSession(session []session.Attachable) Option {
return func(o *newResolverOpts) {
o.session = slices.Clone(session)
}
}
func NewResolver(c *client.Client, opts ...Option) *Resolver {
var cfg newResolverOpts
for _, opt := range opts {
@@ -72,7 +81,14 @@ func NewResolver(c *client.Client, opts ...Option) *Resolver {
}()
}
_, err := c.Build(ctx, client.SolveOpt{Internal: true}, "buildx", func(ctx context.Context, gw gwclient.Client) (*gwclient.Result, error) {
solveOpt := client.SolveOpt{
Internal: true,
}
if len(cfg.session) > 0 {
solveOpt.Session = cfg.session
}
_, err := c.Build(ctx, solveOpt, "buildx", func(ctx context.Context, gw gwclient.Client) (*gwclient.Result, error) {
ready <- gw
<-ctx.Done()
return nil, context.Cause(ctx)