mirror of
https://github.com/moby/buildkit.git
synced 2026-11-06 05:16:45 +00:00
gateway: remove development gateway frontend
This legacy pathway wasn't being used anywhere and has since been succeeded by using named-contexts to modify the syntax directive. We still error out explicitly though. Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
1 parent
a8e548fbbd
commit
d5438591b7
2 files changed
+98
-151
No files matched your search
@@ -17,6 +17,8 @@ const (
|
||||
// KeySource is the option key used by the gateway frontend to represent
|
||||
// the source for the external frontend
|
||||
KeySource = "source"
|
||||
|
||||
KeyDevelDeprecated = "gateway-devel"
|
||||
)
|
||||
|
||||
type Result = result.Result[solver.ResultProxy]
|
||||
|
||||
+96
-151
@@ -27,7 +27,6 @@ import (
|
||||
"github.com/moby/buildkit/client/llb"
|
||||
"github.com/moby/buildkit/client/llb/sourceresolver"
|
||||
"github.com/moby/buildkit/executor"
|
||||
"github.com/moby/buildkit/exporter/containerimage/exptypes"
|
||||
"github.com/moby/buildkit/frontend"
|
||||
"github.com/moby/buildkit/frontend/dockerui"
|
||||
gwclient "github.com/moby/buildkit/frontend/gateway/client"
|
||||
@@ -63,10 +62,6 @@ import (
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
const (
|
||||
keyDevel = "gateway-devel"
|
||||
)
|
||||
|
||||
func NewGatewayFrontend(workers worker.Infos, allowedRepositories []string) (frontend.Frontend, error) {
|
||||
var parsedAllowedRepositories []string
|
||||
|
||||
@@ -89,16 +84,6 @@ type gatewayFrontend struct {
|
||||
allowedRepositories []string
|
||||
}
|
||||
|
||||
func filterPrefix(opts map[string]string, pfx string) map[string]string {
|
||||
m := map[string]string{}
|
||||
for k, v := range opts {
|
||||
if after, ok := strings.CutPrefix(k, pfx); ok {
|
||||
m[after] = v
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
func (gf *gatewayFrontend) checkSourceIsAllowed(source string) error {
|
||||
// Returns nil if the source is allowed.
|
||||
// Returns an error if the source is not allowed.
|
||||
@@ -122,12 +107,15 @@ func (gf *gatewayFrontend) checkSourceIsAllowed(source string) error {
|
||||
}
|
||||
|
||||
func (gf *gatewayFrontend) Solve(ctx context.Context, llbBridge frontend.FrontendLLBBridge, exec executor.Executor, opts map[string]string, inputs map[string]*opspb.Definition, sid string, sm *session.Manager) (*frontend.Result, error) {
|
||||
if _, isDevel := opts[frontend.KeyDevelDeprecated]; isDevel {
|
||||
return nil, errors.New("development gateway is no longer supported")
|
||||
}
|
||||
|
||||
source, ok := opts[frontend.KeySource]
|
||||
if !ok {
|
||||
return nil, errors.Errorf("no source specified for gateway")
|
||||
}
|
||||
|
||||
_, isDevel := opts[keyDevel]
|
||||
var img dockerspec.DockerOCIImage
|
||||
var mfstDigest digest.Digest
|
||||
var rootFS cache.MutableRef
|
||||
@@ -140,142 +128,99 @@ func (gf *gatewayFrontend) Solve(ctx context.Context, llbBridge frontend.Fronten
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if isDevel {
|
||||
devRes, err := llbBridge.Solve(ctx,
|
||||
frontend.SolveRequest{
|
||||
Frontend: source,
|
||||
FrontendOpt: filterPrefix(opts, "gateway-"),
|
||||
FrontendInputs: inputs,
|
||||
}, "gateway:"+sid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
ctx := context.WithoutCancel(ctx)
|
||||
devRes.EachRef(func(ref solver.ResultProxy) error {
|
||||
return ref.Release(ctx)
|
||||
})
|
||||
}()
|
||||
if devRes.Ref == nil {
|
||||
return nil, errors.Errorf("development gateway didn't return default result")
|
||||
}
|
||||
frontendDef = devRes.Ref.Definition()
|
||||
res, err := devRes.Ref.Result(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
workerRef, ok := res.Sys().(*worker.WorkerRef)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("invalid ref: %T", res.Sys())
|
||||
}
|
||||
|
||||
rootFS, err = workerRef.Worker.CacheManager().New(ctx, workerRef.ImmutableRef, session.NewGroup(sid))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rootFS.Release(context.TODO())
|
||||
config, ok := devRes.Metadata[exptypes.ExporterImageConfigKey]
|
||||
if ok {
|
||||
if err := json.Unmarshal(config, &img); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
c, err := forwarder.LLBBridgeToGatewayClient(ctx, llbBridge, exec, opts, inputs, gf.workers, sid, sm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dc, err := dockerui.NewClient(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nc, err := dc.NamedContext(source, dockerui.ContextOpt{
|
||||
CaptureDigest: &mfstDigest,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var st *llb.State
|
||||
if nc != nil {
|
||||
var dockerImage *dockerspec.DockerOCIImage
|
||||
st, dockerImage, err = nc.Load(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if dockerImage != nil {
|
||||
img = *dockerImage
|
||||
}
|
||||
}
|
||||
if st == nil {
|
||||
sourceRef, err := reference.ParseNormalizedNamed(source)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
imr := sourceresolver.NewImageMetaResolver(llbBridge)
|
||||
ref, dgst, config, err := imr.ResolveImageConfig(ctx, reference.TagNameOnly(sourceRef).String(), sourceresolver.Opt{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sourceRef, err = reference.ParseNormalizedNamed(ref)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
mfstDigest = dgst
|
||||
|
||||
if err := json.Unmarshal(config, &img); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if dgst != "" {
|
||||
sourceRef, err = reference.WithDigest(sourceRef, dgst)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
src := llb.Image(sourceRef.String(), &markTypeFrontend{})
|
||||
st = &src
|
||||
}
|
||||
|
||||
def, err := st.Marshal(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res, err := llbBridge.Solve(ctx, frontend.SolveRequest{
|
||||
Definition: def.ToPB(),
|
||||
}, sid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
ctx := context.WithoutCancel(ctx)
|
||||
res.EachRef(func(ref solver.ResultProxy) error {
|
||||
return ref.Release(ctx)
|
||||
})
|
||||
}()
|
||||
if res.Ref == nil {
|
||||
return nil, errors.Errorf("gateway source didn't return default result")
|
||||
}
|
||||
frontendDef = res.Ref.Definition()
|
||||
r, err := res.Ref.Result(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
workerRef, ok := r.Sys().(*worker.WorkerRef)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("invalid ref: %T", r.Sys())
|
||||
}
|
||||
rootFS, err = workerRef.Worker.CacheManager().New(ctx, workerRef.ImmutableRef, session.NewGroup(sid))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rootFS.Release(context.TODO())
|
||||
c, err := forwarder.LLBBridgeToGatewayClient(ctx, llbBridge, exec, opts, inputs, gf.workers, sid, sm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dc, err := dockerui.NewClient(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nc, err := dc.NamedContext(source, dockerui.ContextOpt{
|
||||
CaptureDigest: &mfstDigest,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var st *llb.State
|
||||
if nc != nil {
|
||||
var dockerImage *dockerspec.DockerOCIImage
|
||||
st, dockerImage, err = nc.Load(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if dockerImage != nil {
|
||||
img = *dockerImage
|
||||
}
|
||||
}
|
||||
if st == nil {
|
||||
sourceRef, err := reference.ParseNormalizedNamed(source)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
imr := sourceresolver.NewImageMetaResolver(llbBridge)
|
||||
ref, dgst, config, err := imr.ResolveImageConfig(ctx, reference.TagNameOnly(sourceRef).String(), sourceresolver.Opt{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sourceRef, err = reference.ParseNormalizedNamed(ref)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
mfstDigest = dgst
|
||||
|
||||
if err := json.Unmarshal(config, &img); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if dgst != "" {
|
||||
sourceRef, err = reference.WithDigest(sourceRef, dgst)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
src := llb.Image(sourceRef.String(), &markTypeFrontend{})
|
||||
st = &src
|
||||
}
|
||||
|
||||
def, err := st.Marshal(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res, err := llbBridge.Solve(ctx, frontend.SolveRequest{
|
||||
Definition: def.ToPB(),
|
||||
}, sid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
ctx := context.WithoutCancel(ctx)
|
||||
res.EachRef(func(ref solver.ResultProxy) error {
|
||||
return ref.Release(ctx)
|
||||
})
|
||||
}()
|
||||
if res.Ref == nil {
|
||||
return nil, errors.Errorf("gateway source didn't return default result")
|
||||
}
|
||||
frontendDef = res.Ref.Definition()
|
||||
r, err := res.Ref.Result(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
workerRef, ok := r.Sys().(*worker.WorkerRef)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("invalid ref: %T", r.Sys())
|
||||
}
|
||||
rootFS, err = workerRef.Worker.CacheManager().New(ctx, workerRef.ImmutableRef, session.NewGroup(sid))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rootFS.Release(context.TODO())
|
||||
|
||||
args := []string{"/run"}
|
||||
env := []string{}
|
||||
|
||||
Reference in new issue
Block a user