From 4ac72b584526765f980baca4454b613e0f56c1fb Mon Sep 17 00:00:00 2001 From: sigoden Date: Wed, 12 Feb 2025 07:33:41 +0800 Subject: feat: support check-related features (#162) We can run `argc check` to ensure that everything is ready (environment variables, Node/Python dependencies, mcp-bridge server) --- scripts/check-deps.sh | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 scripts/check-deps.sh (limited to 'scripts/check-deps.sh') diff --git a/scripts/check-deps.sh b/scripts/check-deps.sh new file mode 100755 index 0000000..8d44988 --- /dev/null +++ b/scripts/check-deps.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -e + +# @describe Check dependencies +# +# Examples: +# ./scripts/check-deps.sh tools/execute_sql_code.sh +# ./scripts/check-deps.sh agents/json-viewer/tools.js +# +# @arg script-path! The script file path + +main() { + script_path="$argc_script_path" + if [[ ! -f "$script_path" ]]; then + _exit "✗ not found $script_path" + fi + ext="${script_path##*.}" + if [[ "$script_path" == tools/* ]]; then + if [[ "$ext" == "sh" ]]; then + check_sh_dependencies + fi + elif [[ "$script_path" == agents/* ]]; then + if [[ "$ext" == "sh" ]]; then + check_sh_dependencies + elif [[ "$ext" == "js" ]]; then + check_agent_js_dependencies + elif [[ "$ext" == "py" ]]; then + check_agent_py_dependencies + fi + fi +} + +check_sh_dependencies() { + deps=( $(sed -E -n 's/.*@meta require-tools //p' "$script_path") ) + missing_deps=() + for dep in "${deps[@]}"; do + if ! command -v "$dep" &> /dev/null; then + missing_deps+=("$dep") + fi + done + if [[ -n "${missing_deps}" ]]; then + _exit "✗ missing tools: ${missing_deps[*]}" + fi +} + +check_agent_js_dependencies() { + agent_dir="$(dirname "$script_path")" + if [[ -f "$agent_dir/package.json" ]]; then + npm ls --prefix="$agent_dir" --depth=0 --silent >/dev/null 2>&1 || \ + _exit "✗ missing node modules, FIX: cd $agent_dir && npm install" + fi +} + +check_agent_py_dependencies() { + agent_dir="$(dirname "$script_path")" + if [[ -f "$agent_dir/requirements.txt" ]]; then + python <(cat "$agent_dir/requirements.txt" | sed -E -n 's/^([A-Za-z_]+).*/import \1/p') >/dev/null 2>&1 || \ + _exit "✗ missing python modules, FIX: cd $agent_dir && pip install -r requirements.txt" + fi +} + +_exit() { + echo "$*" >&2 + exit 0 +} + +# See more details at https://github.com/sigoden/argc +eval "$(argc --argc-eval "$0" "$@")" -- cgit v1.2.3