mirror of
https://github.com/containers/podman.git
synced 2025-05-20 00:27:03 +08:00

In the documentation source `--` is only used in long option names or console output. Currently any unescaped `--` that's not in a code block/inline gets converted into a single "en dash". This is confusing to the reader because long options start with two dashes, not one. This switches off the dash transformation in Sphinx. Quotation marks, apostrophes and ellipses are still transformed as before. It also switches off all smart transforms in the podman-remote windows documentation build. This matches the Linux man page build, which doesn't use smart transforms. Signed-off-by: Rob Cowsill <42620235+rcowsill@users.noreply.github.com>
168 lines
4.5 KiB
Bash
Executable File
168 lines
4.5 KiB
Bash
Executable File
#!/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
|