blob: c68efb3dbf99a9c576d2a89f6c563866bb204ba5 [file] [log] [blame] [edit]
#!/bin/bash
ALLOWED_MISSING_COMMANDS="version"
mkdir -p tmp
cp README.md tmp/README.md
# Update each help text section with the current text
while IFS= read -r line; do
if [[ $line =~ ^\$[[:space:]]*picotool[[:space:]]+help ]]; then
# Extract the commands
cmd=$(echo "$line" | sed 's/^\$[[:space:]]*//')
if [ ! -z "$cmd" ]; then
echo "Running: $cmd"
$cmd > "tmp/${cmd// /_}.txt"
# Create the new text section
{
printf '```text\n%s\n' "$line"
cat "tmp/${cmd// /_}.txt"
printf '```'
} > "tmp/new_section.txt"
# Replace the old section with the new one
escaped_line=$(echo "$line" | sed 's/[.*+?^${}()|[]/\\&/g')
perl -i -pe '
BEGIN { $/ = undef; $new = `cat tmp/new_section.txt`; }
s/```text\n'"$escaped_line"'\n.*?\n```/$new/s;
' tmp/README.md
fi
fi
done < README.md
# Extract commands to check for missing help text
echo "Extracting commands from main.cpp..."
extract_commands() {
local array_name=$1
local prefix=""
if [[ $array_name == *"_sub_commands" ]]; then
prefix=${array_name%_sub_commands}
fi
sed -n "/vector<std::shared_ptr<cmd>> $array_name/,/};/p" main.cpp | grep -o 'new \([a-z0-9_]*\)_command' | cut -d' ' -f2 | sed 's/_command$//' | while read cmd; do
if [[ ! -z "$prefix" ]]; then
# Remove prefix from command and replace remaining underscores with dashes
local cmd_without_prefix=${cmd#${prefix}_}
echo "${prefix} ${cmd_without_prefix//_/-}"
else
# Replace underscores with dashes for main commands
echo "${cmd//_/-}"
fi
done
}
# Extract top level commands
main_commands=$(extract_commands "commands")
# Extract sub-commands
sub_command_arrays=$(grep -Eo 'vector<std::shared_ptr<cmd>> [a-z0-9_]+_sub_commands' main.cpp | cut -d' ' -f2)
sub_commands=""
for array in $sub_command_arrays; do
echo "Extracting commands from $array..."
array_commands=$(extract_commands "$array")
sub_commands+=$'\n'"$array_commands"
done
# Combine all commands
commands=$(echo -e "$main_commands$sub_commands")
echo "Checking for missing help text sections..."
missing_commands=()
while IFS= read -r cmd; do
if [ ! -z "$cmd" ]; then
if ! grep -q "\$ picotool help $cmd" tmp/README.md; then
if [[ ! "$ALLOWED_MISSING_COMMANDS" =~ "$cmd" ]]; then
missing_commands+=("$cmd")
echo "Missing help text section for command: $cmd"
fi
fi
fi
done <<< "$commands"
# If there are missing commands, add their help text sections to the end of the file
# Still fails the job later, this is just to provide the output to copy into the right place
if [ ${#missing_commands[@]} -ne 0 ]; then
echo "Adding missing help text sections to end of file..."
for cmd in "${missing_commands[@]}"; do
echo "Running: picotool help $cmd"
picotool help $cmd > "tmp/picotool_help_${cmd// /_}.txt"
{
printf '\n```text\n$ picotool help %s\n' "$cmd"
cat "tmp/picotool_help_${cmd// /_}.txt"
printf '```\n'
} >> tmp/README.md
done
fi
mv tmp/README.md README.md
rm -rf tmp
echo "Help text sections have been updated in README.md"
# Still fail if there are missing commands
if [ ${#missing_commands[@]} -ne 0 ]; then
echo "Failing job due to missing help text sections"
exit 1
fi