Add a script to generate man pages from cobra commands.

Use the generate.sh script instead of md2man directly.
Update Dockerfile for generating man pages.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2016-06-09 11:33:28 -04:00 committed by Tibor Vass
parent 56491f1caa
commit 106418dbd9
6 changed files with 146 additions and 33 deletions

View File

@ -1,7 +1,20 @@
FROM golang:1.6.3 FROM golang:1.6.3-alpine
RUN mkdir -p /go/src/github.com/cpuguy83
RUN mkdir -p /go/src/github.com/cpuguy83 \ RUN apk add -U git bash curl gcc musl-dev
&& git clone -b v1.0.5 https://github.com/cpuguy83/go-md2man.git /go/src/github.com/cpuguy83/go-md2man \
&& cd /go/src/github.com/cpuguy83/go-md2man \ RUN export GLIDE=0.10.2; \
&& go get -v ./... export SRC=https://github.com/Masterminds/glide/releases/download/; \
CMD ["/go/bin/go-md2man", "--help"] curl -sL ${SRC}/${GLIDE}/glide-${GLIDE}-linux-amd64.tar.gz | \
tar -xz linux-amd64/glide && \
mv linux-amd64/glide /usr/bin/glide && \
chmod +x /usr/bin/glide
COPY man/glide.yaml /manvendor/
COPY man/glide.lock /manvendor/
WORKDIR /manvendor/
RUN glide install && mv vendor src
ENV GOPATH=$GOPATH:/go/src/github.com/docker/docker/vendor:/manvendor
RUN go build -o /usr/bin/go-md2man github.com/cpuguy83/go-md2man
WORKDIR /go/src/github.com/docker/docker/
ENTRYPOINT ["man/generate.sh"]

View File

@ -1,33 +1,15 @@
Docker Documentation Docker Documentation
==================== ====================
This directory contains the Docker user manual in the Markdown format. This directory contains scripts for generating the man pages. Many of the man
Do *not* edit the man pages in the man1 directory. Instead, amend the pages are generated directly from the `spf13/cobra` `Command` definition. Some
Markdown (*.md) files. legacy pages are still generated from the markdown files in this directory.
Do *not* edit the man pages in the man1 directory. Instead, update the
Cobra command or amend the Markdown files for legacy pages.
# Generating man pages from the Markdown files
The recommended approach for generating the man pages is via a Docker ## Generate the mange pages
container using the supplied `Dockerfile` to create an image with the correct
environment. This uses `go-md2man`, a pure Go Markdown to man page generator.
## Building the md2man image From within the project root directory run:
There is a `Dockerfile` provided in the `/man` directory of your make manpages
'docker/docker' fork.
Using this `Dockerfile`, create a Docker image tagged `docker/md2man`:
docker build -t docker/md2man .
## Utilizing the image
From within the `/man` directory run the following command:
docker run -v $(pwd):/man -w /man -i docker/md2man ./md2man-all.sh
The `md2man` Docker container will process the Markdown files and generate
the man pages inside the `/man/man1` directory of your fork using
Docker volumes. For more information on Docker volumes see the man page for
`docker run` and also look at the article [Sharing Directories via Volumes]
(https://docs.docker.com/use/working_with_volumes/).

39
man/generate.go Normal file
View File

@ -0,0 +1,39 @@
package main
import (
"fmt"
"os"
"github.com/docker/docker/cli/cobraadaptor"
cliflags "github.com/docker/docker/cli/flags"
"github.com/spf13/cobra/doc"
)
func generateManPages(path string) error {
header := &doc.GenManHeader{
Title: "DOCKER",
Section: "1",
Source: "Docker Community",
}
flags := &cliflags.ClientFlags{
Common: cliflags.InitCommonFlags(),
}
cmd := cobraadaptor.NewCobraAdaptor(flags).GetRootCommand()
cmd.DisableAutoGenTag = true
return doc.GenManTreeFromOpts(cmd, doc.GenManTreeOptions{
Header: header,
Path: path,
CommandSeparator: "-",
})
}
func main() {
path := "/tmp"
if len(os.Args) > 1 {
path = os.Args[1]
}
fmt.Printf("Generating man pages into %s\n", path)
if err := generateManPages(path); err != nil {
fmt.Fprintf(os.Stderr, "Failed to generate man pages: %s\n", err.Error())
}
}

15
man/generate.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
#
# Generate man pages for docker/docker
#
set -eu
mkdir -p ./man/man1
# Generate man pages from cobra commands
go build -o /tmp/gen-manpages ./man
/tmp/gen-manpages ./man/man1
# Generate legacy pages from markdown
./man/md2man-all.sh -q

52
man/glide.lock generated Normal file
View File

@ -0,0 +1,52 @@
hash: ead3ea293a6143fe41069ebec814bf197d8c43a92cc7666b1f7e21a419b46feb
updated: 2016-06-20T21:53:35.420817456Z
imports:
- name: github.com/BurntSushi/toml
version: f0aeabca5a127c4078abb8c8d64298b147264b55
- name: github.com/cpuguy83/go-md2man
version: 2724a9c9051aa62e9cca11304e7dd518e9e41599
subpackages:
- md2man
- name: github.com/fsnotify/fsnotify
version: 30411dbcefb7a1da7e84f75530ad3abe4011b4f8
- name: github.com/hashicorp/hcl
version: da486364306ed66c218be9b7953e19173447c18b
subpackages:
- hcl/ast
- hcl/parser
- hcl/token
- json/parser
- hcl/scanner
- hcl/strconv
- json/scanner
- json/token
- name: github.com/inconshreveable/mousetrap
version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
- name: github.com/magiconair/properties
version: c265cfa48dda6474e208715ca93e987829f572f8
- name: github.com/mitchellh/mapstructure
version: d2dd0262208475919e1a362f675cfc0e7c10e905
- name: github.com/russross/blackfriday
version: 1d6b8e9301e720b08a8938b8c25c018285885438
- name: github.com/shurcooL/sanitized_anchor_name
version: 10ef21a441db47d8b13ebcc5fd2310f636973c77
- name: github.com/spf13/cast
version: 27b586b42e29bec072fe7379259cc719e1289da6
- name: github.com/spf13/jwalterweatherman
version: 33c24e77fb80341fe7130ee7c594256ff08ccc46
- name: github.com/spf13/pflag
version: 367864438f1b1a3c7db4da06a2f55b144e6784e0
- name: github.com/spf13/viper
version: c1ccc378a054ea8d4e38d8c67f6938d4760b53dd
- name: golang.org/x/sys
version: 62bee037599929a6e9146f29d10dd5208c43507d
subpackages:
- unix
- name: gopkg.in/yaml.v2
version: a83829b6f1293c91addabc89d0571c246397bbf4
- name: github.com/spf13/cobra
repo: https://github.com/dnephin/cobra
subpackages:
- doc
version: dc45219961f875acff5ee07ed263e5dc19e0c5f1
devImports: []

12
man/glide.yaml Normal file
View File

@ -0,0 +1,12 @@
package: github.com/docker/docker/man
import:
- package: github.com/cpuguy83/go-md2man
subpackages:
- md2man
- package: github.com/inconshreveable/mousetrap
- package: github.com/spf13/pflag
- package: github.com/spf13/viper
- package: github.com/spf13/cobra
repo: https://github.com/dnephin/cobra
subpackages:
- doc