From 9e62c9f07459a3eb14dd4939dc2c0784592d283d Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 29 Sep 2021 15:33:19 +0200 Subject: [PATCH] Fix --driver flag usage markdown output Signed-off-by: CrazyMax --- commands/bake.go | 6 +++--- commands/build.go | 30 +++++++++++++++--------------- commands/create.go | 12 ++++++++---- commands/prune.go | 2 +- docs/generate.go | 6 ++++++ docs/reference/buildx_bake.md | 8 ++++---- docs/reference/buildx_build.md | 22 +++++++++++----------- docs/reference/buildx_create.md | 2 +- docs/reference/buildx_prune.md | 2 +- driver/manager.go | 11 +++++++++-- 10 files changed, 59 insertions(+), 42 deletions(-) diff --git a/commands/bake.go b/commands/bake.go index 0ab0f7c4..844dd476 100644 --- a/commands/bake.go +++ b/commands/bake.go @@ -201,9 +201,9 @@ func bakeCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags.StringArrayVarP(&options.files, "file", "f", []string{}, "Build definition file") flags.BoolVar(&options.printOnly, "print", false, "Print the options without building") - flags.StringArrayVar(&options.overrides, "set", nil, "Override target value (eg: targetpattern.key=value)") - flags.BoolVar(&options.exportPush, "push", false, "Shorthand for --set=*.output=type=registry") - flags.BoolVar(&options.exportLoad, "load", false, "Shorthand for --set=*.output=type=docker") + flags.StringArrayVar(&options.overrides, "set", nil, "Override target value (e.g., `targetpattern.key=value`)") + flags.BoolVar(&options.exportPush, "push", false, "Shorthand for `--set=*.output=type=registry`") + flags.BoolVar(&options.exportLoad, "load", false, "Shorthand for `--set=*.output=type=docker`") commonBuildFlags(&options.commonOptions, flags) diff --git a/commands/build.go b/commands/build.go index 0b575de7..c8716d7d 100644 --- a/commands/build.go +++ b/commands/build.go @@ -277,30 +277,30 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags := cmd.Flags() - flags.BoolVar(&options.exportPush, "push", false, "Shorthand for --output=type=registry") - flags.BoolVar(&options.exportLoad, "load", false, "Shorthand for --output=type=docker") + flags.BoolVar(&options.exportPush, "push", false, "Shorthand for `--output=type=registry`") + flags.BoolVar(&options.exportLoad, "load", false, "Shorthand for `--output=type=docker`") - flags.StringArrayVarP(&options.tags, "tag", "t", []string{}, "Name and optionally a tag in the 'name:tag' format") + flags.StringArrayVarP(&options.tags, "tag", "t", []string{}, "Name and optionally a tag (format: `name:tag`)") flags.SetAnnotation("tag", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t"}) flags.StringArrayVar(&options.buildArgs, "build-arg", []string{}, "Set build-time variables") flags.SetAnnotation("build-arg", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg"}) - flags.StringVarP(&options.dockerfileName, "file", "f", "", "Name of the Dockerfile (Default is 'PATH/Dockerfile')") + flags.StringVarP(&options.dockerfileName, "file", "f", "", "Name of the Dockerfile (default: `PATH/Dockerfile`)") flags.SetAnnotation("file", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f"}) flags.StringArrayVar(&options.labels, "label", []string{}, "Set metadata for an image") - flags.StringArrayVar(&options.cacheFrom, "cache-from", []string{}, "External cache sources (eg. user/app:cache, type=local,src=path/to/dir)") - flags.StringArrayVar(&options.cacheTo, "cache-to", []string{}, "Cache export destinations (eg. user/app:cache, type=local,dest=path/to/dir)") + flags.StringArrayVar(&options.cacheFrom, "cache-from", []string{}, "External cache sources (e.g., `user/app:cache`, `type=local,src=path/to/dir`)") + flags.StringArrayVar(&options.cacheTo, "cache-to", []string{}, "Cache export destinations (e.g., `user/app:cache`, `type=local,dest=path/to/dir`)") flags.StringVar(&options.target, "target", "", "Set the target build stage to build.") flags.SetAnnotation("target", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target"}) - flags.StringSliceVar(&options.allow, "allow", []string{}, "Allow extra privileged entitlement, e.g. network.host, security.insecure") + flags.StringSliceVar(&options.allow, "allow", []string{}, "Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`)") flags.BoolVarP(&options.quiet, "quiet", "q", false, "Suppress the build output and print image ID on success") flags.StringVar(&options.networkMode, "network", "default", "Set the networking mode for the RUN instructions during build") - flags.StringSliceVar(&options.extraHosts, "add-host", []string{}, "Add a custom host-to-IP mapping (host:ip)") + flags.StringSliceVar(&options.extraHosts, "add-host", []string{}, "Add a custom host-to-IP mapping (format: `host:ip`)") flags.SetAnnotation("add-host", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host"}) flags.StringVar(&options.imageIDFile, "iidfile", "", "Write the image ID to the file") @@ -321,9 +321,9 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags.MarkHidden("compress") flags.StringVarP(&ignore, "memory", "m", "", "Memory limit") flags.MarkHidden("memory") - flags.StringVar(&ignore, "memory-swap", "", "Swap limit equal to memory plus swap: '-1' to enable unlimited swap") + flags.StringVar(&ignore, "memory-swap", "", "Swap limit equal to memory plus swap: `-1` to enable unlimited swap") flags.MarkHidden("memory-swap") - flags.StringVar(&ignore, "shm-size", "", "Size of /dev/shm") + flags.StringVar(&ignore, "shm-size", "", "Size of `/dev/shm`") flags.MarkHidden("shm-size") flags.Int64VarP(&ignoreInt, "cpu-shares", "c", 0, "CPU shares (relative weight)") flags.MarkHidden("cpu-shares") @@ -331,9 +331,9 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags.MarkHidden("cpu-period") flags.Int64Var(&ignoreInt, "cpu-quota", 0, "Limit the CPU CFS (Completely Fair Scheduler) quota") flags.MarkHidden("cpu-quota") - flags.StringVar(&ignore, "cpuset-cpus", "", "CPUs in which to allow execution (0-3, 0,1)") + flags.StringVar(&ignore, "cpuset-cpus", "", "CPUs in which to allow execution (`0-3`, `0,1`)") flags.MarkHidden("cpuset-cpus") - flags.StringVar(&ignore, "cpuset-mems", "", "MEMs in which to allow execution (0-3, 0,1)") + flags.StringVar(&ignore, "cpuset-mems", "", "MEMs in which to allow execution (`0-3`, `0,1`)") flags.MarkHidden("cpuset-mems") flags.StringVar(&ignore, "cgroup-parent", "", "Optional parent cgroup for the container") flags.MarkHidden("cgroup-parent") @@ -350,11 +350,11 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } flags.StringArrayVar(&options.platforms, "platform", platformsDefault, "Set target platform for build") - flags.StringArrayVar(&options.secrets, "secret", []string{}, "Secret file to expose to the build: id=mysecret,src=/local/secret") + flags.StringArrayVar(&options.secrets, "secret", []string{}, "Secret file to expose to the build (format: `id=mysecret,src=/local/secret`)") flags.StringArrayVar(&options.ssh, "ssh", []string{}, "SSH agent socket or keys to expose to the build (format: `default|[=|[,]]`)") - flags.StringArrayVarP(&options.outputs, "output", "o", []string{}, "Output destination (format: type=local,dest=path)") + flags.StringArrayVarP(&options.outputs, "output", "o", []string{}, "Output destination (format: `type=local,dest=path`)") commonBuildFlags(&options.commonOptions, flags) @@ -363,7 +363,7 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { func commonBuildFlags(options *commonOptions, flags *pflag.FlagSet) { options.noCache = flags.Bool("no-cache", false, "Do not use cache when building the image") - flags.StringVar(&options.progress, "progress", "auto", "Set type of progress output (auto, plain, tty). Use plain to show container output") + flags.StringVar(&options.progress, "progress", "auto", "Set type of progress output (`auto`, `plain`, `tty`). Use plain to show container output") options.pull = flags.Bool("pull", false, "Always attempt to pull a newer version of the image") flags.StringVar(&options.metadataFile, "metadata-file", "", "Write build result metadata to the file") } diff --git a/commands/create.go b/commands/create.go index f7a205ed..e400a8cc 100644 --- a/commands/create.go +++ b/commands/create.go @@ -1,6 +1,7 @@ package commands import ( + "bytes" "context" "encoding/csv" "fmt" @@ -204,9 +205,12 @@ func runCreate(dockerCli command.Cli, in createOptions, args []string) error { func createCmd(dockerCli command.Cli) *cobra.Command { var options createOptions - var drivers []string - for s := range driver.GetFactories() { - drivers = append(drivers, s) + var drivers bytes.Buffer + for _, d := range driver.GetFactories() { + if len(drivers.String()) > 0 { + drivers.WriteString(", ") + } + drivers.WriteString(fmt.Sprintf("`%s`", d.Name())) } cmd := &cobra.Command{ @@ -221,7 +225,7 @@ func createCmd(dockerCli command.Cli) *cobra.Command { flags := cmd.Flags() flags.StringVar(&options.name, "name", "", "Builder instance name") - flags.StringVar(&options.driver, "driver", "", fmt.Sprintf("Driver to use (available: %v)", drivers)) + flags.StringVar(&options.driver, "driver", "", fmt.Sprintf("Driver to use (available: %s)", drivers.String())) flags.StringVar(&options.nodeName, "node", "", "Create/modify node with given name") flags.StringVar(&options.flags, "buildkitd-flags", "", "Flags for buildkitd daemon") flags.StringVar(&options.configFile, "config", "", "BuildKit config file") diff --git a/commands/prune.go b/commands/prune.go index cbdeae1f..2318b0c1 100644 --- a/commands/prune.go +++ b/commands/prune.go @@ -139,7 +139,7 @@ func pruneCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags := cmd.Flags() flags.BoolVarP(&options.all, "all", "a", false, "Remove all unused images, not just dangling ones") - flags.Var(&options.filter, "filter", "Provide filter values (e.g. 'until=24h')") + flags.Var(&options.filter, "filter", "Provide filter values (e.g., `until=24h`)") flags.Var(&options.keepStorage, "keep-storage", "Amount of disk space to keep for cache") flags.BoolVar(&options.verbose, "verbose", false, "Provide a more verbose output") flags.BoolVarP(&options.force, "force", "f", false, "Do not prompt for confirmation") diff --git a/docs/generate.go b/docs/generate.go index 27a9f483..6caff755 100644 --- a/docs/generate.go +++ b/docs/generate.go @@ -11,6 +11,12 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/pflag" + + // import drivers otherwise factories are empty + // for --driver output flag usage + _ "github.com/docker/buildx/driver/docker" + _ "github.com/docker/buildx/driver/docker-container" + _ "github.com/docker/buildx/driver/kubernetes" ) const defaultSourcePath = "docs/reference/" diff --git a/docs/reference/buildx_bake.md b/docs/reference/buildx_bake.md index 23c9107e..a9e1a53e 100644 --- a/docs/reference/buildx_bake.md +++ b/docs/reference/buildx_bake.md @@ -17,14 +17,14 @@ Build from a file | --- | --- | | `--builder string` | Override the configured builder instance | | [`-f`](#file), [`--file stringArray`](#file) | Build definition file | -| `--load` | Shorthand for --set=*.output=type=docker | +| `--load` | Shorthand for `--set=*.output=type=docker` | | `--metadata-file string` | Write build result metadata to the file | | [`--no-cache`](#no-cache) | Do not use cache when building the image | | [`--print`](#print) | Print the options without building | -| [`--progress string`](#progress) | Set type of progress output (auto, plain, tty). Use plain to show container output | +| [`--progress string`](#progress) | Set type of progress output (`auto`, `plain`, `tty`). Use plain to show container output | | [`--pull`](#pull) | Always attempt to pull a newer version of the image | -| `--push` | Shorthand for --set=*.output=type=registry | -| [`--set stringArray`](#set) | Override target value (eg: targetpattern.key=value) | +| `--push` | Shorthand for `--set=*.output=type=registry` | +| [`--set stringArray`](#set) | Override target value (e.g., `targetpattern.key=value`) | diff --git a/docs/reference/buildx_build.md b/docs/reference/buildx_build.md index 1a5938ea..db031332 100644 --- a/docs/reference/buildx_build.md +++ b/docs/reference/buildx_build.md @@ -15,28 +15,28 @@ Start a build | Name | Description | | --- | --- | -| [`--add-host stringSlice`](https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host) | Add a custom host-to-IP mapping (host:ip) | -| [`--allow stringSlice`](#allow) | Allow extra privileged entitlement, e.g. network.host, security.insecure | +| [`--add-host stringSlice`](https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host) | Add a custom host-to-IP mapping (format: `host:ip`) | +| [`--allow stringSlice`](#allow) | Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`) | | [`--build-arg stringArray`](https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg) | Set build-time variables | | `--builder string` | Override the configured builder instance | -| [`--cache-from stringArray`](#cache-from) | External cache sources (eg. user/app:cache, type=local,src=path/to/dir) | -| [`--cache-to stringArray`](#cache-to) | Cache export destinations (eg. user/app:cache, type=local,dest=path/to/dir) | -| [`-f`](https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f), [`--file string`](https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f) | Name of the Dockerfile (Default is 'PATH/Dockerfile') | +| [`--cache-from stringArray`](#cache-from) | External cache sources (e.g., `user/app:cache`, `type=local,src=path/to/dir`) | +| [`--cache-to stringArray`](#cache-to) | Cache export destinations (e.g., `user/app:cache`, `type=local,dest=path/to/dir`) | +| [`-f`](https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f), [`--file string`](https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f) | Name of the Dockerfile (default: `PATH/Dockerfile`) | | `--iidfile string` | Write the image ID to the file | | `--label stringArray` | Set metadata for an image | -| [`--load`](#load) | Shorthand for --output=type=docker | +| [`--load`](#load) | Shorthand for `--output=type=docker` | | `--metadata-file string` | Write build result metadata to the file | | `--network string` | Set the networking mode for the RUN instructions during build | | `--no-cache` | Do not use cache when building the image | -| [`-o`](#output), [`--output stringArray`](#output) | Output destination (format: type=local,dest=path) | +| [`-o`](#output), [`--output stringArray`](#output) | Output destination (format: `type=local,dest=path`) | | [`--platform stringArray`](#platform) | Set target platform for build | -| [`--progress string`](#progress) | Set type of progress output (auto, plain, tty). Use plain to show container output | +| [`--progress string`](#progress) | Set type of progress output (`auto`, `plain`, `tty`). Use plain to show container output | | `--pull` | Always attempt to pull a newer version of the image | -| [`--push`](#push) | Shorthand for --output=type=registry | +| [`--push`](#push) | Shorthand for `--output=type=registry` | | `-q`, `--quiet` | Suppress the build output and print image ID on success | -| `--secret stringArray` | Secret file to expose to the build: id=mysecret,src=/local/secret | +| `--secret stringArray` | Secret file to expose to the build (format: `id=mysecret,src=/local/secret`) | | `--ssh stringArray` | SSH agent socket or keys to expose to the build (format: `default\|[=\|[,]]`) | -| [`-t`](https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t), [`--tag stringArray`](https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t) | Name and optionally a tag in the 'name:tag' format | +| [`-t`](https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t), [`--tag stringArray`](https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t) | Name and optionally a tag (format: `name:tag`) | | [`--target string`](https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target) | Set the target build stage to build. | diff --git a/docs/reference/buildx_create.md b/docs/reference/buildx_create.md index fc29910d..41d55e97 100644 --- a/docs/reference/buildx_create.md +++ b/docs/reference/buildx_create.md @@ -16,7 +16,7 @@ Create a new builder instance | `--builder string` | Override the configured builder instance | | [`--buildkitd-flags string`](#buildkitd-flags) | Flags for buildkitd daemon | | [`--config string`](#config) | BuildKit config file | -| [`--driver string`](#driver) | Driver to use (available: []) | +| [`--driver string`](#driver) | Driver to use (available: `docker`, `docker-container`, `kubernetes`) | | [`--driver-opt stringArray`](#driver-opt) | Options for the driver | | [`--leave`](#leave) | Remove a node from builder instead of changing it | | [`--name string`](#name) | Builder instance name | diff --git a/docs/reference/buildx_prune.md b/docs/reference/buildx_prune.md index 73bff44e..a3a9cf5b 100644 --- a/docs/reference/buildx_prune.md +++ b/docs/reference/buildx_prune.md @@ -13,7 +13,7 @@ Remove build cache | --- | --- | | `-a`, `--all` | Remove all unused images, not just dangling ones | | `--builder string` | Override the configured builder instance | -| `--filter filter` | Provide filter values (e.g. 'until=24h') | +| `--filter filter` | Provide filter values (e.g., `until=24h`) | | `-f`, `--force` | Do not prompt for confirmation | | `--keep-storage bytes` | Amount of disk space to keep for cache | | `--verbose` | Provide a more verbose output | diff --git a/driver/manager.go b/driver/manager.go index 5a0ccd66..33fd22a8 100644 --- a/driver/manager.go +++ b/driver/manager.go @@ -129,8 +129,15 @@ func GetDriver(ctx context.Context, name string, f Factory, api dockerclient.API return &cachedDriver{Driver: d}, nil } -func GetFactories() map[string]Factory { - return drivers +func GetFactories() []Factory { + ds := make([]Factory, 0, len(drivers)) + for _, d := range drivers { + ds = append(ds, d) + } + sort.Slice(ds, func(i, j int) bool { + return ds[i].Name() < ds[j].Name() + }) + return ds } type cachedDriver struct {