From 2b5b0f6502cc245b2365e4a8b5fdaaefb9d67b5d Mon Sep 17 00:00:00 2001 From: sigoden Date: Sat, 8 Jun 2024 10:30:34 +0800 Subject: refactor: improve Argcfile.sh and scripts/run-tool* (#34) * refactor: improve Argcfile and scripts/run-tool* * fix run-tool.js on windows --- scripts/run-tool.sh | 124 +++++++++++++++++++++++++++++----------------------- 1 file changed, 70 insertions(+), 54 deletions(-) (limited to 'scripts/run-tool.sh') diff --git a/scripts/run-tool.sh b/scripts/run-tool.sh index 32e559a..2ed01d5 100755 --- a/scripts/run-tool.sh +++ b/scripts/run-tool.sh @@ -1,60 +1,76 @@ #!/usr/bin/env bash set -e -export LLM_ROOT_DIR="$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd)" - -if [[ -f "$LLM_ROOT_DIR/.env" ]]; then - source "$LLM_ROOT_DIR/.env" -fi - -if [[ "$0" == *run-tool.sh ]]; then - tool_name="$1" - tool_data="$2" -else - tool_name="$(basename "$0")" - tool_data="$1" -fi -if [[ "$tool_name" == *.sh ]]; then - tool_name="${tool_name:0:$((${#tool_name}-3))}" -fi - -export LLM_TOOL_NAME="$tool_name" -export LLM_TOOL_CACHE_DIR="$LLM_ROOT_DIR/cache/$tool_name" - -tool_file="$LLM_ROOT_DIR/tools/$tool_name.sh" - -_jq=jq -if [[ "$OS" == "Windows_NT" ]]; then - _jq="jq -b" - tool_file="$(cygpath -w "$tool_file")" -fi - -if [[ -z "$tool_data" ]]; then - echo "No json data" - exit 1 -fi - -data="$( - echo "$tool_data" | \ - $_jq -r ' - to_entries | .[] | - (.key | split("_") | join("-")) as $key | - if .value | type == "array" then - .value | .[] | "--\($key)\n\(. | @json)" - elif .value | type == "boolean" then - if .value then "--\($key)" else "" end - else - "--\($key)\n\(.value | @json)" - end' -)" || { - echo "Invalid json data" - exit 1 +main() { + this_file_name=run-tool.sh + parse_argv "$@" + root_dir="$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd)" + setup_env + tool_path="$root_dir/tools/$tool_name.sh" + run } -while IFS= read -r line; do - if [[ "$line" == '--'* ]]; then - args+=("$line") + +parse_argv() { + if [[ "$0" == *"$this_file_name" ]]; then + tool_name="$1" + tool_data="$2" else - args+=("$(echo "$line" | $_jq -r '.')") + tool_name="$(basename "$0")" + tool_data="$1" + fi + if [[ "$tool_name" == *.sh ]]; then + tool_name="${tool_name:0:$((${#tool_name}-3))}" fi -done <<< "$data" -"$tool_file" "${args[@]}" \ No newline at end of file +} + +setup_env() { + export LLM_ROOT_DIR="$root_dir" + if [[ -f "$LLM_ROOT_DIR/.env" ]]; then + source "$LLM_ROOT_DIR/.env" + fi + export LLM_TOOL_NAME="$tool_name" + export LLM_TOOL_CACHE_DIR="$LLM_ROOT_DIR/cache/$tool_name" +} + +run() { + if [[ -z "$tool_data" ]]; then + die "No JSON data" + fi + + _jq=jq + if [[ "$OS" == "Windows_NT" ]]; then + _jq="jq -b" + tool_path="$(cygpath -w "$tool_path")" + fi + + data="$( + echo "$tool_data" | \ + $_jq -r ' + to_entries | .[] | + (.key | split("_") | join("-")) as $key | + if .value | type == "array" then + .value | .[] | "--\($key)\n\(. | @json)" + elif .value | type == "boolean" then + if .value then "--\($key)" else "" end + else + "--\($key)\n\(.value | @json)" + end' + )" || { + die "Invalid JSON data" + } + while IFS= read -r line; do + if [[ "$line" == '--'* ]]; then + args+=("$line") + else + args+=("$(echo "$line" | $_jq -r '.')") + fi + done <<< "$data" + "$tool_path" "${args[@]}" +} + +die() { + echo "$*" >&2 + exit 1 +} + +main "$@" -- cgit v1.2.3