Files
nanoreth/book/cli/update.sh
2023-07-05 15:03:30 +00:00

129 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# Define the build path.
build_path=$1
if [ -z "$build_path" ]; then
echo "Build path variable is not defined. Exiting..."
exit 1
fi
reth_path=./$build_path/debug/reth
echo "Using reth path: $reth_path (build path: $build_path)"
# Define the path to the JSON configuration file.
json_file="./book/cli/config.json"
echo "Using config file: $json_file"
# Read commands from JSON configuration file.
read_cmds_from_json() {
local json_file="$1"
jq -r '.commands | keys[]' "$json_file"
}
# Read subcommands for a given command from JSON configuration file.
read_subcmds_from_json() {
local json_file="$1"
local cmd="$2"
jq -r ".commands[\"$cmd\"] | if type == \"object\" then keys[] else .[] end" "$json_file"
}
# Read subsubcommands for a given command and subcommand from JSON configuration file.
read_subsubcmds_from_json() {
local json_file="$1"
local cmd="$2"
local subcmd="$3"
jq -r ".commands[\"$cmd\"][\"$subcmd\"][]" "$json_file"
}
# Update the main documentation.
update_main_doc() {
local file_path="./book/cli/cli.md"
local cmd_help_output=$($reth_path --help)
sed -i -e '/## Commands/,$d' "$file_path"
cat >> "$file_path" << EOF
## Commands
\`\`\`bash
$ reth --help
$cmd_help_output
\`\`\`
EOF
}
# Update any `reth` command documentation.
update_cli_cmd() {
local cmd="$1"
local subcmds=("${@:2}")
echo "reth $cmd"
local cmd_help_output=$($reth_path "$cmd" --help)
local description=$(echo "$cmd_help_output" | head -n 1)
cat > "./book/cli/$cmd.md" << EOF
# \`reth $cmd\`
$(if [[ -n "$description" ]]; then echo "$description"; fi)
\`\`\`bash
$ reth $cmd --help
$(echo "$cmd_help_output" | sed '1d')
\`\`\`
EOF
for subcmd in "${subcmds[@]}"; do
echo " ├── $subcmd"
local subcmd_help_output=$($reth_path "$cmd" "$subcmd" --help)
local subcmd_description=$(echo "$subcmd_help_output" | head -n 1)
cat >> "book/cli/$cmd.md" << EOF
## \`reth $cmd $subcmd\`
$(if [[ -n "$subcmd_description" ]]; then echo "$subcmd_description"; fi)
\`\`\`bash
$ reth $cmd $subcmd --help
$(echo "$subcmd_help_output" | sed '1d')
\`\`\`
EOF
# Read subsubcommands and update documentation
subsubcmds=($(read_subsubcmds_from_json "$json_file" "$cmd" "$subcmd"))
for subsubcmd in "${subsubcmds[@]}"; do
echo " ├── $subsubcmd"
local subsubcmd_help_output=$($reth_path "$cmd" "$subcmd" "$subsubcmd" --help)
local subsubcmd_description=$(echo "$subsubcmd_help_output" | head -n 1)
cat >> "book/cli/$cmd.md" << EOF
### \`reth $cmd $subcmd $subsubcmd\`
$(if [[ -n "$subsubcmd_description" ]]; then echo "$subsubcmd_description"; fi)
\`\`\`bash
$ reth $cmd $subcmd $subsubcmd --help
$(echo "$subsubcmd_help_output" | sed '1d')
\`\`\`
EOF
done
done
}
# Update the book CLI documentation.
main() {
update_main_doc
# Update commands doc.
cmds=($(read_cmds_from_json "$json_file"))
for cmd in "${cmds[@]}"; do
subcmds=($(read_subcmds_from_json "$json_file" "$cmd"))
update_cli_cmd "$cmd" "${subcmds[@]}"
done
# Update default paths on both Linux and macOS to avoid triggering the CI.
sed -i -e 's/default: \/.*\/reth\//default: \/reth\//g' ./book/cli/*.md
rm ./book/cli/*.md-e
echo "Book updated successfully."
}
main