aboutsummaryrefslogtreecommitdiffstats
path: root/Argcfile.sh
diff options
context:
space:
mode:
Diffstat (limited to 'Argcfile.sh')
-rw-r--r--Argcfile.sh102
1 files changed, 53 insertions, 49 deletions
diff --git a/Argcfile.sh b/Argcfile.sh
index 8b0317d..382cd88 100644
--- a/Argcfile.sh
+++ b/Argcfile.sh
@@ -22,26 +22,32 @@ call() {
}
# @cmd Build the project
-# @option --names-file=functions.txt Path to a file containing function filenames, one per line.
+# @option --names-file=functions.txt Path to a file containing tool filenames, one per line.
+# @option --declarations-file=functions.json <FILE> Path to a json file to save function declarations
# This file specifies which function files to build.
# Example:
# get_current_weather.sh
# may_execute_js_code.js
build() {
- argc build-declarations-json --names-file "${argc_names_file}"
+ argc build-declarations-json --names-file "${argc_names_file}" --declarations-file "${argc_declarations_file}"
argc build-bin --names-file "${argc_names_file}"
}
-# @cmd Build bin dir
-# @option --names-file=functions.txt Path to a file containing function filenames, one per line.
+# @cmd Build tool binaries
+# @option --names-file=functions.txt Path to a file containing tool filenames, one per line.
+# @arg tools*[`_choice_tool`] The tool filenames
build-bin() {
- if [[ ! -f "$argc_names_file" ]]; then
- _die "no found "$argc_names_file""
+ if [[ "${#argc_tools[@]}" -gt 0 ]]; then
+ names=("${argc_tools[@]}" )
+ elif [[ -f "$argc_names_file" ]]; then
+ names=($(cat "$argc_names_file"))
+ fi
+ if [[ -z "$names" ]]; then
+ _die "error: no tools selected"
fi
mkdir -p "$BIN_DIR"
rm -rf "$BIN_DIR"/*
- names=($(cat "$argc_names_file"))
- not_found_funcs=()
+ not_found_tools=()
for name in "${names[@]}"; do
basename="${name%.*}"
lang="${name##*.}"
@@ -52,14 +58,14 @@ build-bin() {
_build_win_shim $lang > "$bin_file"
else
bin_file="$BIN_DIR/$basename"
- ln -s "$PWD/scripts/run-tool.$lang" "$bin_file"
+ ln -s -f "$PWD/scripts/run-tool.$lang" "$bin_file"
fi
else
- not_found_funcs+=("$name")
+ not_found_tools+=("$name")
fi
done
- if [[ -n "$not_found_funcs" ]]; then
- _die "error: not founds functions: ${not_found_funcs[*]}"
+ if [[ -n "$not_found_tools" ]]; then
+ _die "error: not found tools: ${not_found_tools[*]}"
fi
for name in "$BIN_DIR"/*; do
echo "Build $name"
@@ -67,73 +73,71 @@ build-bin() {
}
# @cmd Build declarations.json
-# @option --output=functions.json <FILE> Path to a json file to save function declarations
-# @option --names-file=functions.txt Path to a file containing function filenames, one per line.
-# @arg funcs*[`_choice_func`] The function filenames
+# @option --names-file=functions.txt Path to a file containing tool filenames, one per line.
+# @option --declarations-file=functions.json <FILE> Path to a json file to save function declarations
+# @arg tools*[`_choice_tool`] The tool filenames
build-declarations-json() {
- if [[ "${#argc_funcs[@]}" -gt 0 ]]; then
- names=("${argc_funcs[@]}" )
+ if [[ "${#argc_tools[@]}" -gt 0 ]]; then
+ names=("${argc_tools[@]}" )
elif [[ -f "$argc_names_file" ]]; then
names=($(cat "$argc_names_file"))
fi
if [[ -z "$names" ]]; then
- _die "error: no function for building declarations.json"
+ _die "error: no tools selected"
fi
json_list=()
- not_found_funcs=()
- build_failed_funcs=()
+ not_found_tools=()
+ build_failed_tools=()
for name in "${names[@]}"; do
lang="${name##*.}"
func_file="tools/$name"
if [[ ! -f "$func_file" ]]; then
- not_found_funcs+=("$name")
+ not_found_tools+=("$name")
continue;
fi
- json_data="$("build-single-declaration" "$name")" || {
- build_failed_funcs+=("$name")
+ json_data="$(build-tool-declaration "$name")" || {
+ build_failed_tools+=("$name")
}
json_list+=("$json_data")
done
- if [[ -n "$not_found_funcs" ]]; then
- _die "error: not found functions: ${not_found_funcs[*]}"
+ if [[ -n "$not_found_tools" ]]; then
+ _die "error: not found tools: ${not_found_tools[*]}"
fi
- if [[ -n "$build_failed_funcs" ]]; then
- _die "error: invalid functions: ${build_failed_funcs[*]}"
+ if [[ -n "$build_failed_tools" ]]; then
+ _die "error: invalid tools: ${build_failed_tools[*]}"
fi
- echo "Build $argc_output"
- echo "["$(IFS=,; echo "${json_list[*]}")"]" | jq '.' > "$argc_output"
+ echo "Build $argc_declarations_file"
+ echo "["$(IFS=,; echo "${json_list[*]}")"]" | jq '.' > "$argc_declarations_file"
}
-# @cmd Build single declaration
-# @arg func![`_choice_func`] The function name
-build-single-declaration() {
- func="$1"
- lang="${func##*.}"
+# @cmd Build function declaration for a tool
+# @arg tool![`_choice_tool`] The function name
+build-tool-declaration() {
+ lang="${1##*.}"
cmd="$(_lang_to_cmd "$lang")"
- LLM_FUNCTION_ACTION=declarate "$cmd" "scripts/run-tool.$lang" "$func"
+ "$cmd" "scripts/build-declarations.$lang" "tools/$1" | jq '.[0]'
}
-# @cmd List functions that can be put into functions.txt
+# @cmd List tools that can be put into functions.txt
# Examples:
-# argc --list-functions > functions.txt
-# argc --list-functions search_duckduckgo.sh >> functions.txt
-# @arg funcs*[`_choice_func`] The function filenames, list all available functions if not provided
-list-functions() {
- _choice_func
+# argc list-tools > functions.txt
+list-tools() {
+ _choice_tool
}
# @cmd Test the project
test() {
- func_names_file=functions.txt.test
- argc list-functions > "$func_names_file"
- argc build --names-file "$func_names_file"
- argc test-functions
- rm -rf "$func_names_file"
+ mkdir -p tmp/tests
+ names_file=tmp/tests/functions.txt
+ declarations_file=tmp/tests/functions.json
+ argc list-tools > "$names_file"
+ argc build --names-file "$names_file" --declarations-file "$declarations_file"
+ argc test-tools
}
# @cmd Test call functions
-test-functions() {
+test-tools() {
if _is_win; then
ext=".cmd"
fi
@@ -172,7 +176,7 @@ install() {
fi
}
-# @cmd Create a boilplate tool script file.
+# @cmd Create a boilplate tool scriptfile.
# @arg args~
create() {
./scripts/create-tool.sh "$@"
@@ -239,7 +243,7 @@ _is_win() {
fi
}
-_choice_func() {
+_choice_tool() {
for item in "${LANG_CMDS[@]}"; do
lang="${item%:*}"
cmd="${item#*:}"