@@ -9,57 +9,63 @@ import (
99 "log"
1010 "os"
1111 "path/filepath"
12- "strconv"
13- "time"
1412
13+ clidocstool "github.com/docker/cli-docs-tool"
14+ "github.com/docker/cli/cli"
1515 "github.com/docker/cli/cli/command"
1616 "github.com/docker/cli/cli/command/commands"
1717 "github.com/spf13/cobra"
1818 "github.com/spf13/cobra/doc"
1919 "github.com/spf13/pflag"
2020)
2121
22- const descriptionSourcePath = "man/src/"
22+ const defaultSourcePath = "man/src/"
2323
24- func generateManPages (opts * options ) error {
24+ type options struct {
25+ source string
26+ target string
27+ }
28+
29+ func gen (opts * options ) error {
2530 log .SetFlags (0 )
2631
27- header := & doc.GenManHeader {
28- Title : "DOCKER" ,
29- Section : "1" ,
30- Source : "Docker Community" ,
31- Manual : "Docker User Manuals" ,
32+ dockerCLI , err := command .NewDockerCli ()
33+ if err != nil {
34+ return err
3235 }
33-
34- // If SOURCE_DATE_EPOCH is set, in order to allow reproducible package
35- // builds, we explicitly set the build time to SOURCE_DATE_EPOCH.
36- if epoch := os .Getenv ("SOURCE_DATE_EPOCH" ); epoch != "" {
37- unixEpoch , err := strconv .ParseInt (epoch , 10 , 64 )
38- if err != nil {
39- return fmt .Errorf ("invalid SOURCE_DATE_EPOCH: %v" , err )
40- }
41- now := time .Unix (unixEpoch , 0 )
42- header .Date = & now
36+ cmd := & cobra.Command {
37+ Use : "docker [OPTIONS] COMMAND [ARG...]" ,
38+ Short : "The base command for the Docker CLI." ,
4339 }
4440
45- dockerCli , err := command . NewDockerCli ( )
46- if err != nil {
41+ clientOpts , _ := cli . SetupRootCommand ( cmd )
42+ if err := dockerCLI . Initialize ( clientOpts ); err != nil {
4743 return err
4844 }
49- cmd := & cobra.Command {Use : "docker" }
50- commands .AddCommands (cmd , dockerCli )
51- source := filepath .Join (opts .source , descriptionSourcePath )
52- if err := loadLongDescription (cmd , source ); err != nil {
45+ commands .AddCommands (cmd , dockerCLI )
46+ // TODO(thaJeztah): cli-docs-tool should already be able to do this, but assumes source-files are not in subdirectories (it looks for `src/docker_command_subcommand.md`)
47+ if err := loadLongDescription (cmd , opts .source ); err != nil {
5348 return err
5449 }
5550
56- cmd .DisableAutoGenTag = true
57- cmd .DisableFlagsInUseLine = true
58- return doc .GenManTreeFromOpts (cmd , doc.GenManTreeOptions {
59- Header : header ,
60- Path : opts .target ,
61- CommandSeparator : "-" ,
51+ c , err := clidocstool .New (clidocstool.Options {
52+ Root : cmd ,
53+ SourceDir : opts .source ,
54+ TargetDir : opts .target ,
55+ ManHeader : & doc.GenManHeader {
56+ Title : "DOCKER" ,
57+ Section : "1" ,
58+ Source : "Docker Community" ,
59+ Manual : "Docker User Manuals" ,
60+ },
61+ Plugin : false ,
6262 })
63+ if err != nil {
64+ return err
65+ }
66+ fmt .Println ("Manpage source folder:" , opts .source )
67+ fmt .Println ("Generating man pages into" , opts .target )
68+ return c .GenManTree (cmd )
6369}
6470
6571func loadLongDescription (parentCommand * cobra.Command , path string ) error {
@@ -98,34 +104,24 @@ func loadLongDescription(parentCommand *cobra.Command, path string) error {
98104 return err
99105 }
100106 cmd .Example = string (content )
101-
102107 }
103108 return nil
104109}
105110
106- type options struct {
107- source string
108- target string
109- }
110-
111- func parseArgs () (* options , error ) {
111+ func run () error {
112112 opts := & options {}
113- cwd , _ := os .Getwd ()
114113 flags := pflag .NewFlagSet (os .Args [0 ], pflag .ContinueOnError )
115- flags .StringVar (& opts .source , "root " , cwd , "Path to project root " )
114+ flags .StringVar (& opts .source , "source " , defaultSourcePath , "Manpage source folder " )
116115 flags .StringVar (& opts .target , "target" , "/tmp" , "Target path for generated man pages" )
117- err := flags .Parse (os .Args [1 :])
118- return opts , err
116+ if err := flags .Parse (os .Args [1 :]); err != nil {
117+ return err
118+ }
119+ return gen (opts )
119120}
120121
121122func main () {
122- opts , err := parseArgs ()
123- if err != nil {
124- fmt .Fprintln (os .Stderr , err .Error ())
125- }
126- fmt .Printf ("Project root: %s\n " , opts .source )
127- fmt .Printf ("Generating man pages into %s\n " , opts .target )
128- if err := generateManPages (opts ); err != nil {
129- fmt .Fprintf (os .Stderr , "Failed to generate man pages: %s\n " , err .Error ())
123+ if err := run (); err != nil {
124+ log .Printf ("ERROR: %+v" , err )
125+ os .Exit (1 )
130126 }
131127}
0 commit comments