Skip to content

Commit e9f8b8c

Browse files
committed
fix persistent flags
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
1 parent bb36108 commit e9f8b8c

12 files changed

Lines changed: 121 additions & 40 deletions

clidocstool.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ import (
2222
"github.com/spf13/cobra"
2323
)
2424

25+
const (
26+
// AnnotationExternalUrl specifies an external link annotation
27+
AnnotationExternalUrl = "docs.external.url"
28+
)
29+
2530
// Options defines options for cli-docs-tool
2631
type Options struct {
2732
Root *cobra.Command

clidocstool_md.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func mdFilename(cmd *cobra.Command) string {
117117

118118
func mdMakeLink(txt, link string, f *pflag.Flag, isAnchor bool) string {
119119
link = "#" + link
120-
annotations, ok := f.Annotations["docs.external.url"]
120+
annotations, ok := f.Annotations[AnnotationExternalUrl]
121121
if ok && len(annotations) > 0 {
122122
link = annotations[0]
123123
} else {
@@ -158,11 +158,10 @@ func mdCmdOutput(cmd *cobra.Command, old string) (string, error) {
158158
fmt.Fprint(b, "\n\n")
159159
}
160160

161-
hasFlags := cmd.Flags().HasAvailableFlags()
162-
161+
// add inherited flags before checking for flags availability
163162
cmd.Flags().AddFlagSet(cmd.InheritedFlags())
164163

165-
if hasFlags {
164+
if cmd.Flags().HasAvailableFlags() {
166165
fmt.Fprint(b, "### Options\n\n")
167166
fmt.Fprint(b, "| Name | Description |\n")
168167
fmt.Fprint(b, "| --- | --- |\n")

clidocstool_md_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestGenMarkdownTree(t *testing.T) {
3939
require.NoError(t, err)
4040
require.NoError(t, c.GenMarkdownTree(buildxCmd))
4141

42-
for _, tt := range []string{"buildx.md", "buildx_build.md"} {
42+
for _, tt := range []string{"buildx.md", "buildx_build.md", "buildx_stop.md"} {
4343
tt := tt
4444
t.Run(tt, func(t *testing.T) {
4545
fres := filepath.Join(tmpdir, tt)

clidocstool_test.go

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var (
3030
dockerCmd *cobra.Command
3131
buildxCmd *cobra.Command
3232
buildxBuildCmd *cobra.Command
33+
buildxStopCmd *cobra.Command
3334
)
3435

3536
//nolint:errcheck
@@ -54,43 +55,52 @@ func init() {
5455
Short: "Start a build",
5556
Run: func(cmd *cobra.Command, args []string) {},
5657
}
58+
buildxStopCmd = &cobra.Command{
59+
Use: "stop [NAME]",
60+
Short: "Stop builder instance",
61+
Run: func(cmd *cobra.Command, args []string) {},
62+
}
63+
64+
buildxPFlags := buildxCmd.PersistentFlags()
65+
buildxPFlags.String("builder", os.Getenv("BUILDX_BUILDER"), "Override the configured builder instance")
5766

58-
flags := buildxBuildCmd.Flags()
59-
flags.Bool("push", false, "Shorthand for --output=type=registry")
60-
flags.Bool("load", false, "Shorthand for --output=type=docker")
61-
flags.StringArrayP("tag", "t", []string{}, "Name and optionally a tag in the 'name:tag' format")
62-
flags.SetAnnotation("tag", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t"})
63-
flags.StringArray("build-arg", []string{}, "Set build-time variables")
64-
flags.SetAnnotation("build-arg", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg"})
65-
flags.StringP("file", "f", "", "Name of the Dockerfile (Default is 'PATH/Dockerfile')")
66-
flags.SetAnnotation("file", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f"})
67-
flags.StringArray("label", []string{}, "Set metadata for an image")
68-
flags.StringArray("cache-from", []string{}, "External cache sources (eg. user/app:cache, type=local,src=path/to/dir)")
69-
flags.StringArray("cache-to", []string{}, "Cache export destinations (eg. user/app:cache, type=local,dest=path/to/dir)")
70-
flags.String("target", "", "Set the target build stage to build.")
71-
flags.SetAnnotation("target", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target"})
72-
flags.StringSlice("allow", []string{}, "Allow extra privileged entitlement, e.g. network.host, security.insecure")
73-
flags.StringArray("platform", []string{}, "Set target platform for build")
74-
flags.StringArray("secret", []string{}, "Secret file to expose to the build: id=mysecret,src=/local/secret")
75-
flags.StringArray("ssh", []string{}, "SSH agent socket or keys to expose to the build (format: `default|<id>[=<socket>|<key>[,<key>]]`)")
76-
flags.StringArrayP("output", "o", []string{}, "Output destination (format: type=local,dest=path)")
67+
buildxBuildFlags := buildxBuildCmd.Flags()
68+
buildxBuildFlags.Bool("push", false, "Shorthand for --output=type=registry")
69+
buildxBuildFlags.Bool("load", false, "Shorthand for --output=type=docker")
70+
buildxBuildFlags.StringArrayP("tag", "t", []string{}, "Name and optionally a tag in the 'name:tag' format")
71+
buildxBuildFlags.SetAnnotation("tag", AnnotationExternalUrl, []string{"https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t"})
72+
buildxBuildFlags.StringArray("build-arg", []string{}, "Set build-time variables")
73+
buildxBuildFlags.SetAnnotation("build-arg", AnnotationExternalUrl, []string{"https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg"})
74+
buildxBuildFlags.StringP("file", "f", "", "Name of the Dockerfile (Default is 'PATH/Dockerfile')")
75+
buildxBuildFlags.SetAnnotation("file", AnnotationExternalUrl, []string{"https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f"})
76+
buildxBuildFlags.StringArray("label", []string{}, "Set metadata for an image")
77+
buildxBuildFlags.StringArray("cache-from", []string{}, "External cache sources (eg. user/app:cache, type=local,src=path/to/dir)")
78+
buildxBuildFlags.StringArray("cache-to", []string{}, "Cache export destinations (eg. user/app:cache, type=local,dest=path/to/dir)")
79+
buildxBuildFlags.String("target", "", "Set the target build stage to build.")
80+
buildxBuildFlags.SetAnnotation("target", AnnotationExternalUrl, []string{"https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target"})
81+
buildxBuildFlags.StringSlice("allow", []string{}, "Allow extra privileged entitlement, e.g. network.host, security.insecure")
82+
buildxBuildFlags.StringArray("platform", []string{}, "Set target platform for build")
83+
buildxBuildFlags.StringArray("secret", []string{}, "Secret file to expose to the build: id=mysecret,src=/local/secret")
84+
buildxBuildFlags.StringArray("ssh", []string{}, "SSH agent socket or keys to expose to the build (format: `default|<id>[=<socket>|<key>[,<key>]]`)")
85+
buildxBuildFlags.StringArrayP("output", "o", []string{}, "Output destination (format: type=local,dest=path)")
7786
// not implemented
78-
flags.String("network", "default", "Set the networking mode for the RUN instructions during build")
79-
flags.StringSlice("add-host", []string{}, "Add a custom host-to-IP mapping (host:ip)")
80-
flags.SetAnnotation("add-host", "docs.external.url", []string{"https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host"})
81-
flags.String("iidfile", "", "Write the image ID to the file")
87+
buildxBuildFlags.String("network", "default", "Set the networking mode for the RUN instructions during build")
88+
buildxBuildFlags.StringSlice("add-host", []string{}, "Add a custom host-to-IP mapping (host:ip)")
89+
buildxBuildFlags.SetAnnotation("add-host", AnnotationExternalUrl, []string{"https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host"})
90+
buildxBuildFlags.String("iidfile", "", "Write the image ID to the file")
8291
// hidden flags
83-
flags.BoolP("quiet", "q", false, "Suppress the build output and print image ID on success")
84-
flags.MarkHidden("quiet")
85-
flags.Bool("squash", false, "Squash newly built layers into a single new layer")
86-
flags.MarkHidden("squash")
87-
flags.String("ulimit", "", "Ulimit options")
88-
flags.MarkHidden("ulimit")
89-
flags.StringSlice("security-opt", []string{}, "Security options")
90-
flags.MarkHidden("security-opt")
91-
flags.Bool("compress", false, "Compress the build context using gzip")
92+
buildxBuildFlags.BoolP("quiet", "q", false, "Suppress the build output and print image ID on success")
93+
buildxBuildFlags.MarkHidden("quiet")
94+
buildxBuildFlags.Bool("squash", false, "Squash newly built layers into a single new layer")
95+
buildxBuildFlags.MarkHidden("squash")
96+
buildxBuildFlags.String("ulimit", "", "Ulimit options")
97+
buildxBuildFlags.MarkHidden("ulimit")
98+
buildxBuildFlags.StringSlice("security-opt", []string{}, "Security options")
99+
buildxBuildFlags.MarkHidden("security-opt")
100+
buildxBuildFlags.Bool("compress", false, "Compress the build context using gzip")
92101

93102
buildxCmd.AddCommand(buildxBuildCmd)
103+
buildxCmd.AddCommand(buildxStopCmd)
94104
dockerCmd.AddCommand(buildxCmd)
95105
}
96106

@@ -108,7 +118,7 @@ func TestGenAllTree(t *testing.T) {
108118
require.NoError(t, err)
109119
require.NoError(t, c.GenAllTree())
110120

111-
for _, tt := range []string{"buildx.md", "buildx_build.md", "docker_buildx.yaml", "docker_buildx_build.yaml"} {
121+
for _, tt := range []string{"buildx.md", "buildx_build.md", "buildx_stop.md", "docker_buildx.yaml", "docker_buildx_build.yaml", "docker_buildx_stop.yaml"} {
112122
tt := tt
113123
t.Run(tt, func(t *testing.T) {
114124
fres := filepath.Join(tmpdir, tt)

clidocstool_yaml.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ func (c *Client) genYamlCustom(cmd *cobra.Command, w io.Writer) error {
140140
longMaxWidth = 74
141141
)
142142

143+
// necessary to add inherited flags otherwise some
144+
// fields are not properly declared like usage
145+
cmd.Flags().AddFlagSet(cmd.InheritedFlags())
146+
143147
cliDoc := cmdDoc{
144148
Name: cmd.CommandPath(),
145149
Aliases: strings.Join(cmd.Aliases, ", "),
@@ -259,7 +263,7 @@ func genFlagResult(flags *pflag.FlagSet, anchors map[string]struct{}) []cmdOptio
259263
Deprecated: len(flag.Deprecated) > 0,
260264
}
261265

262-
if v, ok := flag.Annotations["docs.external.url"]; ok && len(v) > 0 {
266+
if v, ok := flag.Annotations[AnnotationExternalUrl]; ok && len(v) > 0 {
263267
opt.DetailsURL = strings.TrimPrefix(v[0], "https://docs.docker.com")
264268
} else if _, ok = anchors[flag.Name]; ok {
265269
opt.DetailsURL = "#" + flag.Name

clidocstool_yaml_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestGenYamlTree(t *testing.T) {
3939
require.NoError(t, err)
4040
require.NoError(t, c.GenYamlTree(buildxCmd))
4141

42-
for _, tt := range []string{"docker_buildx.yaml", "docker_buildx_build.yaml"} {
42+
for _, tt := range []string{"docker_buildx.yaml", "docker_buildx_build.yaml", "docker_buildx_stop.yaml"} {
4343
tt := tt
4444
t.Run(tt, func(t *testing.T) {
4545
fres := filepath.Join(tmpdir, tt)

fixtures/buildx.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,15 @@ Build with BuildKit
88
| Name | Description |
99
| --- | --- |
1010
| [`build`](buildx_build.md) | Start a build |
11+
| [`stop`](buildx_stop.md) | Stop builder instance |
1112

1213

14+
### Options
15+
16+
| Name | Description |
17+
| --- | --- |
18+
| `--builder string` | Override the configured builder instance |
19+
1320

1421
<!---MARKER_GEN_END-->
1522

fixtures/buildx_build.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Start a build
1414
| [`--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) |
1515
| `--allow stringSlice` | Allow extra privileged entitlement, e.g. network.host, security.insecure |
1616
| [`--build-arg stringArray`](https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg) | Set build-time variables |
17+
| `--builder string` | Override the configured builder instance |
1718
| `--cache-from stringArray` | External cache sources (eg. user/app:cache, type=local,src=path/to/dir) |
1819
| `--cache-to stringArray` | Cache export destinations (eg. user/app:cache, type=local,dest=path/to/dir) |
1920
| `--compress` | Compress the build context using gzip |

fixtures/buildx_stop.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# docker buildx stop
2+
3+
<!---MARKER_GEN_START-->
4+
Stop builder instance
5+
6+
### Options
7+
8+
| Name | Description |
9+
| --- | --- |
10+
| `--builder string` | Override the configured builder instance |
11+
12+
13+
<!---MARKER_GEN_END-->
14+

fixtures/docker_buildx.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,19 @@ pname: docker
55
plink: docker.yaml
66
cname:
77
- docker buildx build
8+
- docker buildx stop
89
clink:
910
- docker_buildx_build.yaml
11+
- docker_buildx_stop.yaml
12+
options:
13+
- option: builder
14+
value_type: string
15+
description: Override the configured builder instance
16+
deprecated: false
17+
experimental: false
18+
experimentalcli: false
19+
kubernetes: false
20+
swarm: false
1021
deprecated: false
1122
experimental: false
1223
experimentalcli: false

0 commit comments

Comments
 (0)