From 6521a4c101ef2b6b1098f717efe814bc8bcd8ace Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Sat, 23 May 2026 19:55:16 +0200 Subject: [PATCH] fix: replace adk deploy cloud_run with gcloud run deploy (compatible with ADK 1.x + Cloud Shell) --- agents/core-logic/Dockerfile | 11 ++--- infrastructure/05-cloudrun-deploy.sh | 69 ++++++++++++++++++---------- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/agents/core-logic/Dockerfile b/agents/core-logic/Dockerfile index 9042e00..57a5ea8 100644 --- a/agents/core-logic/Dockerfile +++ b/agents/core-logic/Dockerfile @@ -1,19 +1,16 @@ -# Dockerfile for OSVauco ADK agent — Cloud Run deployment -# Note: `adk deploy cloud_run` manages this automatically. -# Use this Dockerfile only for manual `gcloud run deploy --source .` deploys. - FROM python:3.12-slim WORKDIR /app +# Install dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt +# Copy agent source COPY . . +# Cloud Run expects PORT env var (default 8080) ENV PORT=8080 -ENV GOOGLE_GENAI_USE_VERTEXAI=True - EXPOSE 8080 -CMD ["adk", "web", "--host", "0.0.0.0", "--port", "8080", "."] +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"] diff --git a/infrastructure/05-cloudrun-deploy.sh b/infrastructure/05-cloudrun-deploy.sh index 1cf602b..8494fc7 100644 --- a/infrastructure/05-cloudrun-deploy.sh +++ b/infrastructure/05-cloudrun-deploy.sh @@ -1,18 +1,13 @@ #!/bin/bash -# 05-cloudrun-deploy.sh — Deploy ADK agent to Cloud Run using `adk deploy cloud_run` -# Run in: local VS Code terminal OR Cloud Shell -# Requires: ADK installed (pip install google-adk), gcloud CLI +# 05-cloudrun-deploy.sh — Deploy OSVauco agent to Cloud Run via Docker + gcloud +# Run in: Cloud Shell or local terminal +# Requires: gcloud CLI (no ADK CLI needed) set -euo pipefail -# Ensure pip-installed tools (adk) are on PATH -export PATH="$HOME/.local/bin:$PATH" - -# Auto-source .env if not already sourced SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ENV_FILE="${SCRIPT_DIR}/../.env" if [ -f "${ENV_FILE}" ]; then - # shellcheck disable=SC1090 set -a; source "${ENV_FILE}"; set +a fi @@ -21,43 +16,67 @@ fi : "${CLOUD_RUN_SERVICE:?Set CLOUD_RUN_SERVICE in .env}" : "${AGENT_SA:?Set AGENT_SA in .env}" -APP_NAME="core-logic" -AGENT_PATH="agents/core-logic" +REPO="${REGION}-docker.pkg.dev/${PROJECT_ID}/osvauco-repo" +IMAGE="${REPO}/osvauco-agent:latest" +AGENT_PATH="${SCRIPT_DIR}/../agents/core-logic" -echo "=== 05: Cloud Run Deploy via ADK CLI ===" +echo "=== 05: Cloud Run Deploy ===" -bash "$(dirname "$0")/00-authcheck.sh" +bash "${SCRIPT_DIR}/00-authcheck.sh" +# Enable required APIs gcloud services enable \ run.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ --project="${PROJECT_ID}" --quiet -# Grant compute SA permission to use Cloud Build +# Create Artifact Registry repo if it doesn't exist +gcloud artifacts repositories describe osvauco-repo \ + --location="${REGION}" --project="${PROJECT_ID}" &>/dev/null || \ +gcloud artifacts repositories create osvauco-repo \ + --repository-format=docker \ + --location="${REGION}" \ + --project="${PROJECT_ID}" --quiet +echo "✓ Artifact Registry repo ready" + +# IAM for Cloud Build PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format="value(projectNumber)") COMPUTE_SA="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" - gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${COMPUTE_SA}" \ --role="roles/cloudbuild.builds.builder" --quiet gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${COMPUTE_SA}" \ --role="roles/secretmanager.secretAccessor" --quiet -echo "✓ IAM bindings for Cloud Build SA applied" +echo "✓ IAM bindings applied" -export GOOGLE_CLOUD_PROJECT="${PROJECT_ID}" -export GOOGLE_CLOUD_LOCATION="${REGION}" -export GOOGLE_GENAI_USE_VERTEXAI="True" +# Configure Docker for Artifact Registry +gcloud auth configure-docker "${REGION}-docker.pkg.dev" --quiet -echo "Deploying ${CLOUD_RUN_SERVICE} to Cloud Run in ${REGION}..." -adk deploy cloud_run \ +# Build image via Cloud Build (no local Docker needed) +echo "Building image via Cloud Build..." +gcloud builds submit "${AGENT_PATH}" \ + --tag="${IMAGE}" \ --project="${PROJECT_ID}" \ + --region="${REGION}" +echo "✓ Image built: ${IMAGE}" + +# Deploy to Cloud Run +echo "Deploying to Cloud Run..." +gcloud run deploy "${CLOUD_RUN_SERVICE}" \ + --image="${IMAGE}" \ --region="${REGION}" \ - --service_name="${CLOUD_RUN_SERVICE}" \ - --app_name="${APP_NAME}" \ - "${AGENT_PATH}" \ - -- --no-allow-unauthenticated + --project="${PROJECT_ID}" \ + --service-account="${AGENT_SA}" \ + --set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID},GOOGLE_CLOUD_LOCATION=${REGION},GOOGLE_GENAI_USE_VERTEXAI=True" \ + --no-allow-unauthenticated \ + --port=8080 \ + --memory=1Gi \ + --cpu=1 \ + --min-instances=0 \ + --max-instances=3 \ + --quiet echo "" echo "=== 05: Cloud Run Deploy COMPLETE ===" @@ -69,7 +88,7 @@ echo "" echo " To call (authenticated):" echo " TOKEN=\$(gcloud auth print-identity-token)" echo " curl -H \"Authorization: Bearer \$TOKEN\" -H 'Content-Type: application/json' \\" -echo " -d '{\"message\": \"Hello\"}' ${SERVICE_URL}/run" +echo " -d '{\"message\": \"Hello\"}' \${SERVICE_URL}/run" echo "" echo " COST NOTE: Cloud Run scales to 0. No idle cost." echo " Delete with: gcloud run services delete ${CLOUD_RUN_SERVICE} --region=${REGION} --quiet"