@@ -3,11 +3,13 @@ package build // import "github.com/docker/docker/api/server/backend/build"
33import (
44 "context"
55 "fmt"
6+ "strings"
67
78 "github.com/docker/distribution/reference"
89 "github.com/docker/docker/api/types"
910 "github.com/docker/docker/api/types/backend"
1011 "github.com/docker/docker/builder"
12+ buildkit "github.com/docker/docker/builder/builder-next"
1113 "github.com/docker/docker/builder/fscache"
1214 "github.com/docker/docker/image"
1315 "github.com/docker/docker/pkg/stringid"
@@ -30,24 +32,39 @@ type Backend struct {
3032 builder Builder
3133 fsCache * fscache.FSCache
3234 imageComponent ImageComponent
35+ buildkit * buildkit.Builder
3336}
3437
3538// NewBackend creates a new build backend from components
36- func NewBackend (components ImageComponent , builder Builder , fsCache * fscache.FSCache ) (* Backend , error ) {
37- return & Backend {imageComponent : components , builder : builder , fsCache : fsCache }, nil
39+ func NewBackend (components ImageComponent , builder Builder , fsCache * fscache.FSCache , buildkit * buildkit. Builder ) (* Backend , error ) {
40+ return & Backend {imageComponent : components , builder : builder , fsCache : fsCache , buildkit : buildkit }, nil
3841}
3942
4043// Build builds an image from a Source
4144func (b * Backend ) Build (ctx context.Context , config backend.BuildConfig ) (string , error ) {
4245 options := config .Options
46+ useBuildKit := false
47+ if strings .HasPrefix (options .SessionID , "buildkit:" ) {
48+ useBuildKit = true
49+ options .SessionID = strings .TrimPrefix (options .SessionID , "buildkit:" )
50+ }
51+
4352 tagger , err := NewTagger (b .imageComponent , config .ProgressWriter .StdoutFormatter , options .Tags )
4453 if err != nil {
4554 return "" , err
4655 }
4756
48- build , err := b .builder .Build (ctx , config )
49- if err != nil {
50- return "" , err
57+ var build * builder.Result
58+ if useBuildKit {
59+ build , err = b .buildkit .Build (ctx , config )
60+ if err != nil {
61+ return "" , err
62+ }
63+ } else {
64+ build , err = b .builder .Build (ctx , config )
65+ if err != nil {
66+ return "" , err
67+ }
5168 }
5269
5370 var imageID = build .ImageID
0 commit comments