mirror of https://github.com/docker/docs.git
				
				
				
			Put all core drivers in docker-machine binary
Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
		
							parent
							
								
									e35b169139
								
							
						
					
					
						commit
						92ce49b367
					
				|  | @ -99,21 +99,13 @@ This will generate and open the report file: | ||||||
| 
 | 
 | ||||||
| ### Advanced build targets | ### Advanced build targets | ||||||
| 
 | 
 | ||||||
| Just build the machine binary itself (native): | Build for all supported OSes and architectures (binaries will be in the `bin` project subfolder): | ||||||
| 
 | 
 | ||||||
|     make machine |     make build-x | ||||||
| 
 | 
 | ||||||
| Just build the plugins (native): | Build for a specific list of OSes and architectures: | ||||||
| 
 | 
 | ||||||
|     make plugins |     TARGET_OS=linux TARGET_ARCH="amd64 arm" make build-x | ||||||
| 
 |  | ||||||
| Build for all supported oses and architectures (binaries will be in the `bin` project subfolder): |  | ||||||
| 
 |  | ||||||
|     make cross |  | ||||||
| 
 |  | ||||||
| Build for a specific list of oses and architectures: |  | ||||||
| 
 |  | ||||||
|     TARGET_OS=linux TARGET_ARCH="amd64 arm" make cross |  | ||||||
| 
 | 
 | ||||||
| You can further control build options through the following environment variables: | You can further control build options through the following environment variables: | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/amazonec2" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(amazonec2.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/azure" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(azure.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/digitalocean" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(digitalocean.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/exoscale" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(exoscale.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/generic" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(generic.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/google" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(google.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/hyperv" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(hyperv.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/none" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(none.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/openstack" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(openstack.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/rackspace" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(rackspace.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/softlayer" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(softlayer.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/virtualbox" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(virtualbox.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/vmwarefusion" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(vmwarefusion.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/vmwarevcloudair" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(vmwarevcloudair.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"github.com/docker/machine/drivers/vmwarevsphere" |  | ||||||
| 	"github.com/docker/machine/libmachine/drivers/plugin" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	plugin.RegisterDriver(vmwarevsphere.NewDriver("", "")) |  | ||||||
| } |  | ||||||
|  | @ -9,6 +9,23 @@ import ( | ||||||
| 	"github.com/codegangsta/cli" | 	"github.com/codegangsta/cli" | ||||||
| 	"github.com/docker/machine/commands" | 	"github.com/docker/machine/commands" | ||||||
| 	"github.com/docker/machine/commands/mcndirs" | 	"github.com/docker/machine/commands/mcndirs" | ||||||
|  | 	"github.com/docker/machine/drivers/amazonec2" | ||||||
|  | 	"github.com/docker/machine/drivers/azure" | ||||||
|  | 	"github.com/docker/machine/drivers/digitalocean" | ||||||
|  | 	"github.com/docker/machine/drivers/exoscale" | ||||||
|  | 	"github.com/docker/machine/drivers/generic" | ||||||
|  | 	"github.com/docker/machine/drivers/google" | ||||||
|  | 	"github.com/docker/machine/drivers/hyperv" | ||||||
|  | 	"github.com/docker/machine/drivers/none" | ||||||
|  | 	"github.com/docker/machine/drivers/openstack" | ||||||
|  | 	"github.com/docker/machine/drivers/rackspace" | ||||||
|  | 	"github.com/docker/machine/drivers/softlayer" | ||||||
|  | 	"github.com/docker/machine/drivers/virtualbox" | ||||||
|  | 	"github.com/docker/machine/drivers/vmwarefusion" | ||||||
|  | 	"github.com/docker/machine/drivers/vmwarevcloudair" | ||||||
|  | 	"github.com/docker/machine/drivers/vmwarevsphere" | ||||||
|  | 	"github.com/docker/machine/libmachine/drivers/plugin" | ||||||
|  | 	"github.com/docker/machine/libmachine/drivers/plugin/localbinary" | ||||||
| 	"github.com/docker/machine/libmachine/log" | 	"github.com/docker/machine/libmachine/log" | ||||||
| 	"github.com/docker/machine/version" | 	"github.com/docker/machine/version" | ||||||
| ) | ) | ||||||
|  | @ -65,6 +82,12 @@ func setDebugOutputLevel() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
|  | 	if os.Getenv(localbinary.PluginEnvKey) == localbinary.PluginEnvVal { | ||||||
|  | 		driverName := os.Getenv(localbinary.PluginEnvDriverName) | ||||||
|  | 		runDriver(driverName) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	setDebugOutputLevel() | 	setDebugOutputLevel() | ||||||
| 	cli.AppHelpTemplate = AppHelpTemplate | 	cli.AppHelpTemplate = AppHelpTemplate | ||||||
| 	cli.CommandHelpTemplate = CommandHelpTemplate | 	cli.CommandHelpTemplate = CommandHelpTemplate | ||||||
|  | @ -133,6 +156,44 @@ func main() { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func runDriver(driverName string) { | ||||||
|  | 	switch driverName { | ||||||
|  | 	case "amazonec2": | ||||||
|  | 		plugin.RegisterDriver(amazonec2.NewDriver("", "")) | ||||||
|  | 	case "azure": | ||||||
|  | 		plugin.RegisterDriver(azure.NewDriver("", "")) | ||||||
|  | 	case "digitalocean": | ||||||
|  | 		plugin.RegisterDriver(digitalocean.NewDriver("", "")) | ||||||
|  | 	case "exoscale": | ||||||
|  | 		plugin.RegisterDriver(exoscale.NewDriver("", "")) | ||||||
|  | 	case "generic": | ||||||
|  | 		plugin.RegisterDriver(generic.NewDriver("", "")) | ||||||
|  | 	case "google": | ||||||
|  | 		plugin.RegisterDriver(google.NewDriver("", "")) | ||||||
|  | 	case "hyperv": | ||||||
|  | 		plugin.RegisterDriver(hyperv.NewDriver("", "")) | ||||||
|  | 	case "none": | ||||||
|  | 		plugin.RegisterDriver(none.NewDriver("", "")) | ||||||
|  | 	case "openstack": | ||||||
|  | 		plugin.RegisterDriver(openstack.NewDriver("", "")) | ||||||
|  | 	case "rackspace": | ||||||
|  | 		plugin.RegisterDriver(rackspace.NewDriver("", "")) | ||||||
|  | 	case "softlayer": | ||||||
|  | 		plugin.RegisterDriver(softlayer.NewDriver("", "")) | ||||||
|  | 	case "virtualbox": | ||||||
|  | 		plugin.RegisterDriver(virtualbox.NewDriver("", "")) | ||||||
|  | 	case "vmwarefusion": | ||||||
|  | 		plugin.RegisterDriver(vmwarefusion.NewDriver("", "")) | ||||||
|  | 	case "vmwarevcloudair": | ||||||
|  | 		plugin.RegisterDriver(vmwarevcloudair.NewDriver("", "")) | ||||||
|  | 	case "vmwarevsphere": | ||||||
|  | 		plugin.RegisterDriver(vmwarevsphere.NewDriver("", "")) | ||||||
|  | 	default: | ||||||
|  | 		fmt.Fprintf(os.Stderr, "Unsupported driver: %s\n", driverName) | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func cmdNotFound(c *cli.Context, command string) { | func cmdNotFound(c *cli.Context, command string) { | ||||||
| 	log.Fatalf( | 	log.Fatalf( | ||||||
| 		"%s: '%s' is not a %s command. See '%s --help'.", | 		"%s: '%s' is not a %s command. See '%s --help'.", | ||||||
|  |  | ||||||
|  | @ -16,13 +16,18 @@ var ( | ||||||
| 	// Timeout where we will bail if we're not able to properly contact the
 | 	// Timeout where we will bail if we're not able to properly contact the
 | ||||||
| 	// plugin server.
 | 	// plugin server.
 | ||||||
| 	defaultTimeout = 10 * time.Second | 	defaultTimeout = 10 * time.Second | ||||||
|  | 	CoreDrivers    = [...]string{"amazonec2", "azure", "digitalocean", | ||||||
|  | 		"exoscale", "generic", "google", "hyperv", "none", "openstack", | ||||||
|  | 		"rackspace", "softlayer", "virtualbox", "vmwarefusion", | ||||||
|  | 		"vmwarevcloudair", "vmwarevsphere"} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| 	pluginOutPrefix = "(%s) " | 	pluginOutPrefix     = "(%s) " | ||||||
| 	pluginErrPrefix = "(%s) DBG | " | 	pluginErrPrefix     = "(%s) DBG | " | ||||||
| 	PluginEnvKey    = "MACHINE_PLUGIN_TOKEN" | 	PluginEnvKey        = "MACHINE_PLUGIN_TOKEN" | ||||||
| 	PluginEnvVal    = "42" | 	PluginEnvVal        = "42" | ||||||
|  | 	PluginEnvDriverName = "MACHINE_PLUGIN_DRIVER_NAME" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type PluginStreamer interface { | type PluginStreamer interface { | ||||||
|  | @ -84,8 +89,19 @@ func (e ErrPluginBinaryNotFound) Error() string { | ||||||
| 	return fmt.Sprintf("Driver %q not found. Do you have the plugin binary accessible in your PATH?", e.driverName) | 	return fmt.Sprintf("Driver %q not found. Do you have the plugin binary accessible in your PATH?", e.driverName) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func driverPath(driverName string) string { | ||||||
|  | 	for _, coreDriver := range CoreDrivers { | ||||||
|  | 		if coreDriver == driverName { | ||||||
|  | 			return os.Args[0] // "docker-machine"
 | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return fmt.Sprintf("docker-machine-driver-%s", driverName) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func NewPlugin(driverName string) (*Plugin, error) { | func NewPlugin(driverName string) (*Plugin, error) { | ||||||
| 	binaryPath, err := exec.LookPath(fmt.Sprintf("docker-machine-driver-%s", driverName)) | 	driverPath := driverPath(driverName) | ||||||
|  | 	binaryPath, err := exec.LookPath(driverPath) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, ErrPluginBinaryNotFound{driverName} | 		return nil, ErrPluginBinaryNotFound{driverName} | ||||||
| 	} | 	} | ||||||
|  | @ -123,6 +139,7 @@ func (lbe *Executor) Start() (*bufio.Scanner, *bufio.Scanner, error) { | ||||||
| 	errScanner := bufio.NewScanner(lbe.pluginStderr) | 	errScanner := bufio.NewScanner(lbe.pluginStderr) | ||||||
| 
 | 
 | ||||||
| 	os.Setenv(PluginEnvKey, PluginEnvVal) | 	os.Setenv(PluginEnvKey, PluginEnvVal) | ||||||
|  | 	os.Setenv(PluginEnvDriverName, lbe.DriverName) | ||||||
| 
 | 
 | ||||||
| 	if err := cmd.Start(); err != nil { | 	if err := cmd.Start(); err != nil { | ||||||
| 		return nil, nil, fmt.Errorf("Error starting plugin binary: %s", err) | 		return nil, nil, fmt.Errorf("Error starting plugin binary: %s", err) | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								mk/build.mk
								
								
								
								
							
							
						
						
									
										29
									
								
								mk/build.mk
								
								
								
								
							|  | @ -1,31 +1,22 @@ | ||||||
| build-clean: |  | ||||||
| 	rm -Rf $(PREFIX)/bin/* |  | ||||||
| 
 |  | ||||||
| extension = $(patsubst windows,.exe,$(filter windows,$(1))) | extension = $(patsubst windows,.exe,$(filter windows,$(1))) | ||||||
| 
 | 
 | ||||||
| # Cross builder helper
 |  | ||||||
| define gocross | define gocross | ||||||
| 	GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build \
 | 	GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 $(GO) build \
 | ||||||
| 		-o $(PREFIX)/bin/docker-machine_$(1)-$(2)/docker-$(patsubst cmd/%.go,%,$3)$(call extension,$(GOOS)) \
 | 		-o $(PREFIX)/bin/docker-machine_$(1)-$(2)/docker-$(patsubst cmd/%.go,%,$3)$(call extension,$(GOOS)) \
 | ||||||
| 		-a $(VERBOSE_GO) -tags "static_build netgo $(BUILDTAGS)" -installsuffix netgo \
 | 		-a $(VERBOSE_GO) -tags "static_build netgo $(BUILDTAGS)" -installsuffix netgo \
 | ||||||
| 		-ldflags "$(GO_LDFLAGS) -extldflags -static" $(GO_GCFLAGS) $(3); | 		-ldflags "$(GO_LDFLAGS) -extldflags -static" $(GO_GCFLAGS) $(3); | ||||||
| endef | endef | ||||||
| 
 | 
 | ||||||
| # XXX building with -a fails in debug (with -N -l) ????
 | build-clean: | ||||||
|  | 	rm -Rf $(PREFIX)/bin/* | ||||||
| 
 | 
 | ||||||
| # Independent targets for every bin
 | build-x: ./cmd/machine.go | ||||||
| $(PREFIX)/bin/docker-%: ./cmd/%.go $(shell find . -type f -name '*.go') |  | ||||||
| 	$(GO) build -o $@$(call extension,$(GOOS)) $(VERBOSE_GO) -tags "$(BUILDTAGS)" -ldflags "$(GO_LDFLAGS)" $(GO_GCFLAGS) $< |  | ||||||
| 
 |  | ||||||
| # Cross-compilation targets
 |  | ||||||
| build-x-%: ./cmd/%.go $(shell find . -type f -name '*.go') |  | ||||||
| 	$(foreach GOARCH,$(TARGET_ARCH),$(foreach GOOS,$(TARGET_OS),$(call gocross,$(GOOS),$(GOARCH),$<))) | 	$(foreach GOARCH,$(TARGET_ARCH),$(foreach GOOS,$(TARGET_OS),$(call gocross,$(GOOS),$(GOARCH),$<))) | ||||||
| 
 | 
 | ||||||
| # Build just machine
 | $(PREFIX)/bin/docker-machine$(call extension,$(GOOS)): ./cmd/machine.go | ||||||
| build-machine: $(PREFIX)/bin/docker-machine | 	$(GO) build \
 | ||||||
|  | 	-o $@ \
 | ||||||
|  | 	$(VERBOSE_GO) -tags "$(BUILDTAGS)" \
 | ||||||
|  | 	-ldflags "$(GO_LDFLAGS)" $(GO_GCFLAGS) $< | ||||||
| 
 | 
 | ||||||
| # Build all plugins
 | build: $(PREFIX)/bin/docker-machine | ||||||
| build-plugins: $(patsubst ./cmd/%.go,$(PREFIX)/bin/docker-%,$(filter-out %_test.go, $(wildcard ./cmd/machine-driver-*.go))) |  | ||||||
| 
 |  | ||||||
| # Overall cross-build
 |  | ||||||
| build-x: $(patsubst ./cmd/%.go,build-x-%,$(filter-out %_test.go, $(wildcard ./cmd/*.go))) |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								mk/main.mk
								
								
								
								
							
							
						
						
									
										12
									
								
								mk/main.mk
								
								
								
								
							|  | @ -44,24 +44,16 @@ include mk/release.mk | ||||||
| include mk/test.mk | include mk/test.mk | ||||||
| include mk/validate.mk | include mk/validate.mk | ||||||
| 
 | 
 | ||||||
| .all_build: build build-clean build-x build-machine build-plugins | .all_build: build build-clean build-x | ||||||
| .all_coverage: coverage-generate coverage-html coverage-send coverage-serve coverage-clean | .all_coverage: coverage-generate coverage-html coverage-send coverage-serve coverage-clean | ||||||
| .all_release: release-checksum release | .all_release: release-checksum release | ||||||
| .all_test: test-short test-long test-integration | .all_test: test-short test-long test-integration | ||||||
| .all_validate: dco fmt vet lint | .all_validate: dco fmt vet lint | ||||||
| 
 | 
 | ||||||
| default: build | default: build | ||||||
| # Build native machine and all drivers
 |  | ||||||
| build: build-machine build-plugins |  | ||||||
| # Just build native machine itself
 |  | ||||||
| machine: build-machine |  | ||||||
| # Just build the native plugins
 |  | ||||||
| plugins: build-plugins |  | ||||||
| # Build all, cross platform
 |  | ||||||
| cross: build-x |  | ||||||
| 
 | 
 | ||||||
| install: | install: | ||||||
| 	cp $(PREFIX)/bin/docker-machine $(PREFIX)/bin/docker-machine-driver* /usr/local/bin | 	cp $(PREFIX)/bin/docker-machine /usr/local/bin | ||||||
| 
 | 
 | ||||||
| clean: coverage-clean build-clean | clean: coverage-clean build-clean | ||||||
| test: dco fmt test-short lint vet | test: dco fmt test-short lint vet | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue