aboutsummaryrefslogtreecommitdiffstats
path: root/tools/docker_exec.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/docker_exec.sh')
-rw-r--r--tools/docker_exec.sh27
1 files changed, 27 insertions, 0 deletions
diff --git a/tools/docker_exec.sh b/tools/docker_exec.sh
new file mode 100644
index 0000000..66f79bc
--- /dev/null
+++ b/tools/docker_exec.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# @describe Execute a shell command inside a sandbox container.
+# @option --container! Container name/id to execute in.
+# @option --command! Shell command to run (executed via sh -lc inside container).
+# @option --timeout_sec Timeout in seconds. Default: 60
+
+main() {
+ local c="${argc_container}"
+ local cmd="${argc_command}"
+ local t="${argc_timeout_sec:-60}"
+
+ if ! docker ps --format '{{.Names}}' | grep -qx "$c"; then
+ echo "ERROR: container not running: $c" >> "$LLM_OUTPUT"
+ exit 2
+ fi
+
+ local out
+ local rc=0
+ out="$(timeout "${t}" docker exec "$c" sh -lc "$cmd" 2>&1)" || rc=$?
+
+ printf '{"exit_code":%d,"output":%s}\n' "$rc" "$(python -c 'import json,sys; print(json.dumps(sys.stdin.read()))' <<<"$out")" >> "$LLM_OUTPUT"
+}
+
+eval "$(argc --argc-eval "$0" "$@")"
+