mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
2c17e9a333
Starting with the 22.06 release, buildx is the default client for docker build, which uses BuildKit as builder. This patch changes the default builder version as advertised by the daemon to "2" (BuildKit), so that pre-22.06 CLIs with BuildKit support (but no buildx installed) also default to using BuildKit when interacting with a 22.06 (or up) daemon. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package build // import "github.com/docker/docker/api/server/router/build"
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/docker/docker/api/server/router"
|
|
"github.com/docker/docker/api/types"
|
|
)
|
|
|
|
// buildRouter is a router to talk with the build controller
|
|
type buildRouter struct {
|
|
backend Backend
|
|
daemon experimentalProvider
|
|
routes []router.Route
|
|
features *map[string]bool
|
|
}
|
|
|
|
// NewRouter initializes a new build router
|
|
func NewRouter(b Backend, d experimentalProvider, features *map[string]bool) router.Router {
|
|
r := &buildRouter{
|
|
backend: b,
|
|
daemon: d,
|
|
features: features,
|
|
}
|
|
r.initRoutes()
|
|
return r
|
|
}
|
|
|
|
// Routes returns the available routers to the build controller
|
|
func (r *buildRouter) Routes() []router.Route {
|
|
return r.routes
|
|
}
|
|
|
|
func (r *buildRouter) initRoutes() {
|
|
r.routes = []router.Route{
|
|
router.NewPostRoute("/build", r.postBuild),
|
|
router.NewPostRoute("/build/prune", r.postPrune),
|
|
router.NewPostRoute("/build/cancel", r.postCancel),
|
|
}
|
|
}
|
|
|
|
// BuilderVersion derives the default docker builder version from the config.
|
|
//
|
|
// The default on Linux is version "2" (BuildKit), but the daemon can be
|
|
// configured to recommend version "1" (classic Builder). Windows does not
|
|
// yet support BuildKit for native Windows images, and uses "1" (classic builder)
|
|
// as a default.
|
|
//
|
|
// This value is only a recommendation as advertised by the daemon, and it is
|
|
// up to the client to choose which builder to use.
|
|
func BuilderVersion(features map[string]bool) types.BuilderVersion {
|
|
// TODO(thaJeztah) move the default to daemon/config
|
|
if runtime.GOOS == "windows" {
|
|
return types.BuilderV1
|
|
}
|
|
|
|
bv := types.BuilderBuildKit
|
|
if v, ok := features["buildkit"]; ok && !v {
|
|
bv = types.BuilderV1
|
|
}
|
|
return bv
|
|
}
|