solana/docs/build-cli-usage.sh

64 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
cd "$(dirname "$0")"
# shellcheck source=ci/env.sh
source ../ci/env.sh
# Get current channel
eval "$(../ci/channel-info.sh)"
# set the output file' location
out=${1:-src/cli/usage.md}
# load the usage file's header
cat src/cli/.usage.md.header > "$out"
# Skip generating the detailed usage doc for non deployment commits of the docs
if [[ -n $CI ]]; then
if [[ $CI_BRANCH != $EDGE_CHANNEL* ]] && [[ $CI_BRANCH != $BETA_CHANNEL* ]] && [[ $CI_BRANCH != $STABLE_CHANNEL* ]]; then
echo "**NOTE:** The usage doc is only auto-generated during full production deployments of the docs"
echo "**NOTE:** This usage doc is auto-generated during deployments" >> "$out"
exit
fi
fi
echo 'Building the solana cli from source...'
# shellcheck source=ci/rust-version.sh
source ../ci/rust-version.sh stable
: "${rust_stable:=}" # Pacify shellcheck
# pre-build with output enabled to appease Travis CI's hang check
cargo build -p solana-cli
usage=$(cargo -q run -p solana-cli -- -C ~/.foo --help | sed -e 's|'"$HOME"'|~|g' -e 's/[[:space:]]\+$//')
section() {
declare mark=${2:-"###"}
declare section=$1
read -r name rest <<<"$section"
printf '%s %s
' "$mark" "$name"
printf '```text
%s
```
' "$section"
}
section "$usage" >> "$out"
usage=$(sed -e '/^ \{5,\}/d' <<<"$usage")
in_subcommands=0
while read -r subcommand rest; do
[[ $subcommand == "SUBCOMMANDS:" ]] && in_subcommands=1 && continue
if ((in_subcommands)); then
section "$(cargo -q run -p solana-cli -- help "$subcommand" | sed -e 's|'"$HOME"'|~|g' -e 's/[[:space:]]\+$//')" "###" >> "$out"
fi
done <<<"$usage">>"$out"