blob: 8249fc497a1089e6bbbffadf73693c78967e3d46 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
#!/usr/bin/env bash
# Assemble remote man pages for darwin or windows from markdown files
set -e
PLATFORM=$1 ## linux, windows or darwin
TARGET=${2} ## where to output files
SOURCES=${@:3} ## directories to find markdown files
# Overridden for testing. Native podman-remote binary expected filepaths
if [[ -z "$PODMAN" ]]; then
case $(env -i HOME=$HOME PATH=$PATH go env GOOS) in
windows)
PODMAN=bin/windows/podman.exe ;;
darwin)
PODMAN=bin/darwin/podman ;;
*) # Assume "linux"
PODMAN=bin/podman-remote ;;
esac
fi
function usage() {
echo >&2 "$0 PLATFORM TARGET SOURCES..."
echo >&2 "PLATFORM: Is either linux, darwin or windows."
echo >&2 "TARGET: Is the directory where files will be staged. eg, docs/build/remote/linux"
echo >&2 "SOURCES: Are the directories of source files. eg, docs/source/markdown"
}
function fail() {
echo >&2 -e "$(dirname $0): $@\n"
exit 1
}
case $PLATFORM in
darwin|linux)
PUBLISHER=man_fn
ext=1
;;
windows)
PUBLISHER=html_fn
ext=1.md
;;
-help)
usage
exit 0
;;
*) fail '"linux", "darwin" and "windows" are the only supported platforms.' ;;
esac
if [[ -z $TARGET ]]; then
fail 'TARGET directory is required'
fi
if [[ -z $SOURCES ]]; then
fail 'At least one SOURCE directory is required'
fi
if [[ ! -x $PODMAN ]]; then
fail "$PODMAN does not exist"
fi
## man_fn copies the man page or link to flattened directory
function man_fn() {
local page=$1
local file=$(basename $page)
local dir=$(dirname $page)
if [[ ! -f $page ]]; then
page=$dir/links/${file%.*}.$ext
fi
install $page $TARGET/${file%%.*}.1
}
## html_fn converts the markdown page or link to HTML
function html_fn() {
local markdown=$1
local file=$(basename $markdown)
local dir=$(dirname $markdown)
if [[ ! -f $markdown ]]; then
local link=$(sed -e 's?.so man1/\(.*\)?\1?' <$dir/links/${file%.md})
markdown=$dir/$link.md
fi
pandoc --ascii --standalone --from markdown-smart \
--lua-filter=docs/links-to-html.lua \
--lua-filter=docs/use-pagetitle.lua \
-o $TARGET/${file%%.*}.html $markdown
}
# Run 'podman help' (possibly against a subcommand, e.g. 'podman help image')
# and return a list of each first word under 'Available Commands', that is,
# the command name but not its description.
function podman_commands() {
$PODMAN help "$@" |\
awk '/^Available Commands:/{ok=1;next}/^Options:/{ok=0}ok { print $1 }' |\
grep .
}
function podman_all_commands(){
for cmd in $(podman_commands "$@") ; do
echo $@ $cmd
podman_all_commands $@ $cmd
done
}
## pub_pages finds and publishes the remote manual pages
function pub_pages() {
local source=$1
local publisher=$2
for f in $(ls $source/podman-remote*); do
$publisher $f
done
while IFS= read -r cmd; do
file="podman-${cmd// /-}"
# Source dir may have man (.1) files (linux/darwin) or .1.md (windows)
# but the links subdir will always be .1 (man) files
if [ -f $source/$file.$ext -o -f $source/links/$file.1 ]; then
$publisher $(echo $source/$file.$ext)
else
# This is worth failing CI for
fail "no doc file nor link $source/$file.$ext for 'podman $cmd'"
fi
done <<< "$(podman_all_commands)"
}
## sed syntax is different on darwin and linux
## sed --help fails on mac, meaning we have to use mac syntax
function sed_os(){
if sed --help > /dev/null 2>&1 ; then
$(sed -i "$@")
else
$(sed -i "" "$@")
fi
}
## rename renames podman-remote.ext to podman.ext, and fixes up contents to reflect change
function rename (){
if [[ "$PLATFORM" != linux ]]; then
local remote=$(echo $TARGET/podman-remote.*)
local ext=${remote##*.}
mv $remote $TARGET/podman.$ext
sed_os "s/podman\\\*-remote/podman/g" $TARGET/podman.$ext
sed_os "s/A\ remote\ CLI\ for\ Podman\:\ //g" $TARGET/podman.$ext
case $PLATFORM in
darwin|linux)
sed_os "s/Podman\\\*-remote/Podman\ for\ Mac/g" $TARGET/podman.$ext
;;
windows)
sed_os "s/Podman\\\*-remote/Podman\ for\ Windows/g" $TARGET/podman.$ext
;;
esac
fi
}
## walk the SOURCES for markdown sources
mkdir -p $TARGET
for s in $SOURCES; do
if [[ -d $s ]]; then
pub_pages $s $PUBLISHER
else
echo >&2 "Warning: $s does not exist"
fi
done
rename
|