From 36a37a624e42e7b848624ea5c510391efe18a8ce Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 26 Oct 2021 12:53:35 +0200 Subject: [PATCH] refactor: flags lexical order Signed-off-by: CrazyMax --- commands/bake.go | 6 +- commands/build.go | 146 ++++++++++++++++++++++++---------------------- 2 files changed, 79 insertions(+), 73 deletions(-) diff --git a/commands/bake.go b/commands/bake.go index 844dd476..2ec451b2 100644 --- a/commands/bake.go +++ b/commands/bake.go @@ -20,8 +20,8 @@ import ( type bakeOptions struct { files []string - printOnly bool overrides []string + printOnly bool commonOptions } @@ -200,10 +200,10 @@ func bakeCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { flags := cmd.Flags() flags.StringArrayVarP(&options.files, "file", "f", []string{}, "Build definition file") + flags.BoolVar(&options.exportLoad, "load", false, "Shorthand for `--set=*.output=type=docker`") flags.BoolVar(&options.printOnly, "print", false, "Print the options without building") - 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`") + flags.StringArrayVar(&options.overrides, "set", nil, "Override target value (e.g., `targetpattern.key=value`)") commonBuildFlags(&options.commonOptions, flags) diff --git a/commands/build.go b/commands/build.go index e224404d..ead06b2a 100644 --- a/commands/build.go +++ b/commands/build.go @@ -15,7 +15,7 @@ import ( "github.com/docker/buildx/util/tracing" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" - "github.com/docker/cli/opts" + dockeropts "github.com/docker/cli/opts" "github.com/docker/docker/pkg/ioutils" "github.com/docker/go-units" "github.com/moby/buildkit/client" @@ -29,54 +29,39 @@ import ( const defaultTargetName = "default" type buildOptions struct { - commonOptions contextPath string dockerfileName string - tags []string - labels []string - buildArgs []string + allow []string + buildArgs []string cacheFrom []string cacheTo []string - target string - platforms []string - secrets []string - ssh []string - outputs []string - imageIDFile string extraHosts []string + imageIDFile string + labels []string networkMode string + outputs []string + platforms []string quiet bool - shmSize opts.MemBytes - ulimits *opts.UlimitOpt + secrets []string + shmSize dockeropts.MemBytes + ssh []string + tags []string + target string + ulimits *dockeropts.UlimitOpt + commonOptions // unimplemented squash bool - - allow []string - - // hidden - // untrusted bool - // memory opts.MemBytes - // memorySwap opts.MemSwapBytes - // shmSize opts.MemBytes - // cpuShares int64 - // cpuPeriod int64 - // cpuQuota int64 - // cpuSetCpus string - // cpuSetMems string - // cgroupParent string - // isolation string - // compress bool - // securityOpt []string } type commonOptions struct { builder string + metadataFile string noCache *bool progress string pull *bool - metadataFile string + // golangci-lint#826 // nolint:structcheck exportPush bool @@ -119,16 +104,16 @@ func runBuild(dockerCli command.Cli, in buildOptions) (err error) { DockerfilePath: in.dockerfileName, InStream: os.Stdin, }, - Tags: in.tags, - Labels: listToMap(in.labels, false), BuildArgs: listToMap(in.buildArgs, true), - Pull: pull, - NoCache: noCache, - Target: in.target, - ImageIDFile: in.imageIDFile, ExtraHosts: in.extraHosts, + ImageIDFile: in.imageIDFile, + Labels: listToMap(in.labels, false), NetworkMode: in.networkMode, + NoCache: noCache, + Pull: pull, ShmSize: in.shmSize, + Tags: in.tags, + Target: in.target, Ulimits: in.ulimits, } @@ -268,7 +253,7 @@ func buildTargets(ctx context.Context, dockerCli command.Cli, opts map[string]bu func newBuildOptions() buildOptions { ulimits := make(map[string]*units.Ulimit) return buildOptions{ - ulimits: opts.NewUlimitOpt(&ulimits), + ulimits: dockeropts.NewUlimitOpt(&ulimits), } } @@ -287,35 +272,56 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { }, } + var platformsDefault []string + if v := os.Getenv("DOCKER_DEFAULT_PLATFORM"); v != "" { + platformsDefault = []string{v} + } + 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.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.StringSliceVar(&options.allow, "allow", []string{}, "Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`)") - 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.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.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.StringVar(&options.imageIDFile, "iidfile", "", "Write the image ID to the file") + flags.StringArrayVar(&options.labels, "label", []string{}, "Set metadata for an image") - 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.BoolVar(&options.exportLoad, "load", false, "Shorthand for `--output=type=docker`") - 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.StringVar(&options.networkMode, "network", "default", "Set the networking mode for the RUN instructions during build") - flags.StringSliceVar(&options.allow, "allow", []string{}, "Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`)") + flags.StringArrayVarP(&options.outputs, "output", "o", []string{}, "Output destination (format: `type=local,dest=path`)") + + flags.StringArrayVar(&options.platforms, "platform", platformsDefault, "Set target platform for build") + + flags.BoolVar(&options.exportPush, "push", false, "Shorthand for `--output=type=registry`") 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 (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") + + flags.StringArrayVar(&options.secrets, "secret", []string{}, "Secret file to expose to the build (format: `id=mysecret,src=/local/secret`)") + flags.Var(&options.shmSize, "shm-size", "Size of `/dev/shm`") + + flags.StringArrayVar(&options.ssh, "ssh", []string{}, "SSH agent socket or keys to expose to the build (format: `default|[=|[,]]`)") + + 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.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.Var(options.ulimits, "ulimit", "Ulimit options") // not implemented @@ -327,47 +333,47 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { var ignoreSlice []string var ignoreBool bool var ignoreInt int64 - flags.StringSliceVar(&ignoreSlice, "security-opt", []string{}, "Security options") - flags.MarkHidden("security-opt") + + flags.StringVar(&ignore, "cgroup-parent", "", "Optional parent cgroup for the container") + flags.MarkHidden("cgroup-parent") + flags.BoolVar(&ignoreBool, "compress", false, "Compress the build context using gzip") flags.MarkHidden("compress") + + flags.StringVar(&ignore, "isolation", "", "Container isolation technology") + flags.MarkHidden("isolation") + + flags.StringSliceVar(&ignoreSlice, "security-opt", []string{}, "Security options") + flags.MarkHidden("security-opt") + 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.MarkHidden("memory-swap") + flags.Int64VarP(&ignoreInt, "cpu-shares", "c", 0, "CPU shares (relative weight)") flags.MarkHidden("cpu-shares") + flags.Int64Var(&ignoreInt, "cpu-period", 0, "Limit the CPU CFS (Completely Fair Scheduler) period") 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.MarkHidden("cpuset-cpus") + 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") - flags.StringVar(&ignore, "isolation", "", "Container isolation technology") - flags.MarkHidden("isolation") + flags.BoolVar(&ignoreBool, "rm", true, "Remove intermediate containers after a successful build") flags.MarkHidden("rm") + flags.BoolVar(&ignoreBool, "force-rm", false, "Always remove intermediate containers") flags.MarkHidden("force-rm") - platformsDefault := []string{} - if v := os.Getenv("DOCKER_DEFAULT_PLATFORM"); v != "" { - platformsDefault = []string{v} - } - flags.StringArrayVar(&options.platforms, "platform", platformsDefault, "Set target platform for build") - - 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`)") - commonBuildFlags(&options.commonOptions, flags) - return cmd }