Files
copilotkit__copilotkit/examples/integrations/agentcore/deploy-langgraph.sh
Maxim 4534b807ec chore(examples): run agentcore helper scripts through uv
The deploy and local-dev scripts called bare `python3` and relied on the caller
already having PyYAML, requests, boto3 and colorama importable. `scripts/requirements.txt`
listed them but nothing installed it, and `uv run scripts/test-agent.py` — the
command the script's own docstring gives — failed because there was no project
for uv to resolve against.

Route every Python entry point through `uv run --project`, backed by the
example-root project added in the previous commit, and drop the orphaned
`requirements.txt`. Preflight now checks for `uv` rather than `python3`; uv
provisions the interpreter itself, so the hand-rolled Python 3.8 version assert
goes away with it.

`test-agent.py` starts a local agent inside that agent's own uv project with
`--locked`, so a locally run agent gets the same dependency set as its image
instead of an ad-hoc resolve.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 16:29:02 +02:00

79 lines
3.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# deploy-langgraph.sh — Deploy CopilotKit + LangGraph on AWS AgentCore
# Usage: ./deploy-langgraph.sh [--skip-frontend] [--skip-backend]
# Stack: <stack_name_base>-lg (isolated from deploy-strands.sh)
# Using Terraform instead? See infra-terraform/README.md
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PATTERN="langgraph-single-agent"
SUFFIX="-lg"
CONFIG="$SCRIPT_DIR/config.yaml"
CDK_DIR="$SCRIPT_DIR/infra-cdk"
SKIP_FRONTEND=false
SKIP_BACKEND=false
for arg in "$@"; do
[[ "$arg" == "--skip-frontend" ]] && SKIP_FRONTEND=true
[[ "$arg" == "--skip-backend" ]] && SKIP_BACKEND=true
done
echo "── CopilotKit + AWS AgentCore (LangGraph) ──────────────────────────────"
# ── Preflight checks ──────────────────────────────────────────────────────────
check_command() {
command -v "$1" >/dev/null 2>&1 || { echo "ERROR: $1 is required but not installed."; exit 1; }
}
check_command aws
check_command node
check_command uv
check_command docker
aws sts get-caller-identity --query "Account" --output text >/dev/null 2>&1 || \
{ echo "ERROR: AWS credentials not configured. Run: aws configure"; exit 1; }
echo "✓ Preflight checks passed"
# ── Patch config.yaml (pattern + stack name suffix) ──────────────────────────
uv run --project "$SCRIPT_DIR" python - "$CONFIG" "$PATTERN" "$SUFFIX" <<'PYEOF'
import re, sys
config_path, pattern, suffix = sys.argv[1], sys.argv[2], sys.argv[3]
with open(config_path) as f:
content = f.read()
# Patch pattern
content = re.sub(r"(pattern:\s*)[\w-]+", r"\g<1>" + pattern, content)
# Patch stack_name_base: strip any existing -lg/-st suffix, append this script's suffix
def add_suffix(m):
base = re.sub(r"-(lg|st)$", "", m.group(1))
return f"stack_name_base: {base}{suffix}"
content = re.sub(r"stack_name_base:\s*([\w-]+)", add_suffix, content)
with open(config_path, "w") as f:
f.write(content)
# Read back the final stack name for display
stack = re.search(r"stack_name_base:\s*([\w-]+)", content).group(1)
print(f"✓ config.yaml → pattern: {pattern}, stack: {stack}")
PYEOF
# ── CDK deploy ───────────────────────────────────────────────────────────────
if [ "$SKIP_BACKEND" = true ]; then
echo "⚡ Skipping backend deploy (--skip-backend)"
else
echo "Deploying infrastructure (this takes ~1015 min on first run)..."
cd "$CDK_DIR"
npm install --silent
npx cdk@latest deploy --all --require-approval never --output "${SCRIPT_DIR}/cdk.out${SUFFIX}"
cd "$SCRIPT_DIR"
echo "✓ Infrastructure deployed"
fi
# ── Frontend deploy ───────────────────────────────────────────────────────────
if [ "$SKIP_FRONTEND" = true ]; then
echo "⚡ Skipping frontend deploy (--skip-frontend)"
else
STACK_NAME=$(uv run --project "$SCRIPT_DIR" python -c "import re; c=open('$CONFIG').read(); print(re.search(r'stack_name_base:\s*([\w-]+)', c).group(1))")
echo "Deploying frontend for stack: $STACK_NAME"
uv run --project "$SCRIPT_DIR" "$SCRIPT_DIR/scripts/deploy-frontend.py" "$STACK_NAME"
fi
echo ""
echo "✓ Done!"