Skip to content

Commit e7fa8f8

Browse files
authored
Merge pull request #6350 from jedevc/remove-development-gateway
2 parents a8e548f + d543859 commit e7fa8f8

File tree

2 files changed

+75
-128
lines changed

2 files changed

+75
-128
lines changed

frontend/frontend.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ const (
1717
// KeySource is the option key used by the gateway frontend to represent
1818
// the source for the external frontend
1919
KeySource = "source"
20+
21+
KeyDevelDeprecated = "gateway-devel"
2022
)
2123

2224
type Result = result.Result[solver.ResultProxy]

frontend/gateway/gateway.go

Lines changed: 73 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"github.com/moby/buildkit/client/llb"
2828
"github.com/moby/buildkit/client/llb/sourceresolver"
2929
"github.com/moby/buildkit/executor"
30-
"github.com/moby/buildkit/exporter/containerimage/exptypes"
3130
"github.com/moby/buildkit/frontend"
3231
"github.com/moby/buildkit/frontend/dockerui"
3332
gwclient "github.com/moby/buildkit/frontend/gateway/client"
@@ -63,10 +62,6 @@ import (
6362
"google.golang.org/grpc/status"
6463
)
6564

66-
const (
67-
keyDevel = "gateway-devel"
68-
)
69-
7065
func NewGatewayFrontend(workers worker.Infos, allowedRepositories []string) (frontend.Frontend, error) {
7166
var parsedAllowedRepositories []string
7267

@@ -89,16 +84,6 @@ type gatewayFrontend struct {
8984
allowedRepositories []string
9085
}
9186

92-
func filterPrefix(opts map[string]string, pfx string) map[string]string {
93-
m := map[string]string{}
94-
for k, v := range opts {
95-
if after, ok := strings.CutPrefix(k, pfx); ok {
96-
m[after] = v
97-
}
98-
}
99-
return m
100-
}
101-
10287
func (gf *gatewayFrontend) checkSourceIsAllowed(source string) error {
10388
// Returns nil if the source is allowed.
10489
// Returns an error if the source is not allowed.
@@ -122,12 +107,15 @@ func (gf *gatewayFrontend) checkSourceIsAllowed(source string) error {
122107
}
123108

124109
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) {
110+
if _, isDevel := opts[frontend.KeyDevelDeprecated]; isDevel {
111+
return nil, errors.New("development gateway is no longer supported")
112+
}
113+
125114
source, ok := opts[frontend.KeySource]
126115
if !ok {
127116
return nil, errors.Errorf("no source specified for gateway")
128117
}
129118

130-
_, isDevel := opts[keyDevel]
131119
var img dockerspec.DockerOCIImage
132120
var mfstDigest digest.Digest
133121
var rootFS cache.MutableRef
@@ -140,142 +128,99 @@ func (gf *gatewayFrontend) Solve(ctx context.Context, llbBridge frontend.Fronten
140128
return nil, err
141129
}
142130

143-
if isDevel {
144-
devRes, err := llbBridge.Solve(ctx,
145-
frontend.SolveRequest{
146-
Frontend: source,
147-
FrontendOpt: filterPrefix(opts, "gateway-"),
148-
FrontendInputs: inputs,
149-
}, "gateway:"+sid)
131+
c, err := forwarder.LLBBridgeToGatewayClient(ctx, llbBridge, exec, opts, inputs, gf.workers, sid, sm)
132+
if err != nil {
133+
return nil, err
134+
}
135+
dc, err := dockerui.NewClient(c)
136+
if err != nil {
137+
return nil, err
138+
}
139+
nc, err := dc.NamedContext(source, dockerui.ContextOpt{
140+
CaptureDigest: &mfstDigest,
141+
})
142+
if err != nil {
143+
return nil, err
144+
}
145+
var st *llb.State
146+
if nc != nil {
147+
var dockerImage *dockerspec.DockerOCIImage
148+
st, dockerImage, err = nc.Load(ctx)
150149
if err != nil {
151150
return nil, err
152151
}
153-
defer func() {
154-
ctx := context.WithoutCancel(ctx)
155-
devRes.EachRef(func(ref solver.ResultProxy) error {
156-
return ref.Release(ctx)
157-
})
158-
}()
159-
if devRes.Ref == nil {
160-
return nil, errors.Errorf("development gateway didn't return default result")
152+
if dockerImage != nil {
153+
img = *dockerImage
161154
}
162-
frontendDef = devRes.Ref.Definition()
163-
res, err := devRes.Ref.Result(ctx)
155+
}
156+
if st == nil {
157+
sourceRef, err := reference.ParseNormalizedNamed(source)
164158
if err != nil {
165159
return nil, err
166160
}
167161

168-
workerRef, ok := res.Sys().(*worker.WorkerRef)
169-
if !ok {
170-
return nil, errors.Errorf("invalid ref: %T", res.Sys())
171-
}
172-
173-
rootFS, err = workerRef.Worker.CacheManager().New(ctx, workerRef.ImmutableRef, session.NewGroup(sid))
174-
if err != nil {
175-
return nil, err
176-
}
177-
defer rootFS.Release(context.TODO())
178-
config, ok := devRes.Metadata[exptypes.ExporterImageConfigKey]
179-
if ok {
180-
if err := json.Unmarshal(config, &img); err != nil {
181-
return nil, err
182-
}
183-
}
184-
} else {
185-
c, err := forwarder.LLBBridgeToGatewayClient(ctx, llbBridge, exec, opts, inputs, gf.workers, sid, sm)
162+
imr := sourceresolver.NewImageMetaResolver(llbBridge)
163+
ref, dgst, config, err := imr.ResolveImageConfig(ctx, reference.TagNameOnly(sourceRef).String(), sourceresolver.Opt{})
186164
if err != nil {
187165
return nil, err
188166
}
189-
dc, err := dockerui.NewClient(c)
167+
168+
sourceRef, err = reference.ParseNormalizedNamed(ref)
190169
if err != nil {
191170
return nil, err
192171
}
193-
nc, err := dc.NamedContext(source, dockerui.ContextOpt{
194-
CaptureDigest: &mfstDigest,
195-
})
196-
if err != nil {
172+
173+
mfstDigest = dgst
174+
175+
if err := json.Unmarshal(config, &img); err != nil {
197176
return nil, err
198177
}
199-
var st *llb.State
200-
if nc != nil {
201-
var dockerImage *dockerspec.DockerOCIImage
202-
st, dockerImage, err = nc.Load(ctx)
203-
if err != nil {
204-
return nil, err
205-
}
206-
if dockerImage != nil {
207-
img = *dockerImage
208-
}
209-
}
210-
if st == nil {
211-
sourceRef, err := reference.ParseNormalizedNamed(source)
212-
if err != nil {
213-
return nil, err
214-
}
215-
216-
imr := sourceresolver.NewImageMetaResolver(llbBridge)
217-
ref, dgst, config, err := imr.ResolveImageConfig(ctx, reference.TagNameOnly(sourceRef).String(), sourceresolver.Opt{})
218-
if err != nil {
219-
return nil, err
220-
}
221178

222-
sourceRef, err = reference.ParseNormalizedNamed(ref)
179+
if dgst != "" {
180+
sourceRef, err = reference.WithDigest(sourceRef, dgst)
223181
if err != nil {
224182
return nil, err
225183
}
226-
227-
mfstDigest = dgst
228-
229-
if err := json.Unmarshal(config, &img); err != nil {
230-
return nil, err
231-
}
232-
233-
if dgst != "" {
234-
sourceRef, err = reference.WithDigest(sourceRef, dgst)
235-
if err != nil {
236-
return nil, err
237-
}
238-
}
239-
240-
src := llb.Image(sourceRef.String(), &markTypeFrontend{})
241-
st = &src
242184
}
243185

244-
def, err := st.Marshal(ctx)
245-
if err != nil {
246-
return nil, err
247-
}
186+
src := llb.Image(sourceRef.String(), &markTypeFrontend{})
187+
st = &src
188+
}
248189

249-
res, err := llbBridge.Solve(ctx, frontend.SolveRequest{
250-
Definition: def.ToPB(),
251-
}, sid)
252-
if err != nil {
253-
return nil, err
254-
}
255-
defer func() {
256-
ctx := context.WithoutCancel(ctx)
257-
res.EachRef(func(ref solver.ResultProxy) error {
258-
return ref.Release(ctx)
259-
})
260-
}()
261-
if res.Ref == nil {
262-
return nil, errors.Errorf("gateway source didn't return default result")
263-
}
264-
frontendDef = res.Ref.Definition()
265-
r, err := res.Ref.Result(ctx)
266-
if err != nil {
267-
return nil, err
268-
}
269-
workerRef, ok := r.Sys().(*worker.WorkerRef)
270-
if !ok {
271-
return nil, errors.Errorf("invalid ref: %T", r.Sys())
272-
}
273-
rootFS, err = workerRef.Worker.CacheManager().New(ctx, workerRef.ImmutableRef, session.NewGroup(sid))
274-
if err != nil {
275-
return nil, err
276-
}
277-
defer rootFS.Release(context.TODO())
190+
def, err := st.Marshal(ctx)
191+
if err != nil {
192+
return nil, err
193+
}
194+
195+
res, err := llbBridge.Solve(ctx, frontend.SolveRequest{
196+
Definition: def.ToPB(),
197+
}, sid)
198+
if err != nil {
199+
return nil, err
200+
}
201+
defer func() {
202+
ctx := context.WithoutCancel(ctx)
203+
res.EachRef(func(ref solver.ResultProxy) error {
204+
return ref.Release(ctx)
205+
})
206+
}()
207+
if res.Ref == nil {
208+
return nil, errors.Errorf("gateway source didn't return default result")
209+
}
210+
frontendDef = res.Ref.Definition()
211+
r, err := res.Ref.Result(ctx)
212+
if err != nil {
213+
return nil, err
214+
}
215+
workerRef, ok := r.Sys().(*worker.WorkerRef)
216+
if !ok {
217+
return nil, errors.Errorf("invalid ref: %T", r.Sys())
218+
}
219+
rootFS, err = workerRef.Worker.CacheManager().New(ctx, workerRef.ImmutableRef, session.NewGroup(sid))
220+
if err != nil {
221+
return nil, err
278222
}
223+
defer rootFS.Release(context.TODO())
279224

280225
args := []string{"/run"}
281226
env := []string{}

0 commit comments

Comments
 (0)