| #!/bin/bash |
| set -e |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| WORK_DIR="${WORKSPACE_ROOT_DIR:-$(pwd)}" |
| |
| OPENAI_ALLOWED_DOMAINS="${OPENAI_ALLOWED_DOMAINS:-api.openai.com}" |
|
|
| |
| if [ "$1" = "--work_dir" ]; then |
| if [ -z "$2" ]; then |
| echo "Error: --work_dir flag provided but no directory specified." |
| exit 1 |
| fi |
| WORK_DIR="$2" |
| shift 2 |
| fi |
|
|
| WORK_DIR=$(realpath "$WORK_DIR") |
|
|
| |
| CONTAINER_NAME="codex_$(echo "$WORK_DIR" | sed 's/\//_/g' | sed 's/[^a-zA-Z0-9_-]//g')" |
|
|
| |
| cleanup() { |
| docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true |
| } |
| |
| trap cleanup EXIT |
|
|
| |
| if [ "$#" -eq 0 ]; then |
| echo "Usage: $0 [--work_dir directory] \"COMMAND\"" |
| exit 1 |
| fi |
|
|
| |
| if [ -z "$WORK_DIR" ]; then |
| echo "Error: No work directory provided and WORKSPACE_ROOT_DIR is not set." |
| exit 1 |
| fi |
|
|
| |
| if [ -z "$OPENAI_ALLOWED_DOMAINS" ]; then |
| echo "Error: OPENAI_ALLOWED_DOMAINS is empty." |
| exit 1 |
| fi |
|
|
| |
| cleanup |
|
|
| |
| docker run --name "$CONTAINER_NAME" -d \ |
| -e OPENAI_API_KEY \ |
| --cap-add=NET_ADMIN \ |
| --cap-add=NET_RAW \ |
| -v "$WORK_DIR:/app$WORK_DIR" \ |
| codex \ |
| sleep infinity |
|
|
| |
| docker exec --user root "$CONTAINER_NAME" bash -c "mkdir -p /etc/codex" |
| for domain in $OPENAI_ALLOWED_DOMAINS; do |
| |
| if [[ ! "$domain" =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then |
| echo "Error: Invalid domain format: $domain" |
| exit 1 |
| fi |
| echo "$domain" | docker exec --user root -i "$CONTAINER_NAME" bash -c "cat >> /etc/codex/allowed_domains.txt" |
| done |
|
|
| |
| docker exec --user root "$CONTAINER_NAME" bash -c "chmod 444 /etc/codex/allowed_domains.txt && chown root:root /etc/codex/allowed_domains.txt" |
|
|
| |
| docker exec --user root "$CONTAINER_NAME" bash -c "/usr/local/bin/init_firewall.sh" |
|
|
| |
| docker exec --user root "$CONTAINER_NAME" bash -c "rm -f /usr/local/bin/init_firewall.sh" |
|
|
| |
| |
|
|
| quoted_args="" |
| for arg in "$@"; do |
| quoted_args+=" $(printf '%q' "$arg")" |
| done |
| docker exec -it "$CONTAINER_NAME" bash -c "cd \"/app$WORK_DIR\" && codex --sandbox workspace-write --ask-for-approval on-request ${quoted_args}" |
|
|