@@ -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-
7065func 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-
10287func (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
124109func (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