Skip to content

Commit a73948e

Browse files
feat: add GKE as deployment target (#833)
* feat: initial changes to support gke deployment * feat: consolidate deployment logic to be tf focused in deployment/
1 parent 617951f commit a73948e

File tree

98 files changed

+33598
-1529
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+33598
-1529
lines changed

.cloudbuild/terraform/build_triggers.tf

Lines changed: 121 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -128,74 +128,91 @@ locals {
128128
name = "adk-cloud_run-bq-analytics"
129129
value = "adk,cloud_run,--bq-analytics"
130130
},
131+
{
132+
name = "adk-gke"
133+
value = "adk,gke"
134+
},
135+
{
136+
name = "langgraph-gke"
137+
value = "langgraph,gke"
138+
},
139+
{
140+
name = "agentic_rag-gke-vertex_ai_search"
141+
value = "agentic_rag,gke,--datastore,vertex_ai_search"
142+
},
143+
{
144+
name = "adk_live-gke"
145+
value = "adk_live,gke"
146+
},
147+
{
148+
name = "adk_a2a-gke"
149+
value = "adk_a2a,gke"
150+
},
151+
{
152+
name = "adk_go-gke"
153+
value = "adk_go,gke"
154+
},
155+
{
156+
name = "adk_java-gke"
157+
value = "adk_java,gke"
158+
},
159+
{
160+
name = "adk_ts-gke"
161+
value = "adk_ts,gke"
162+
},
131163
]
132164

133-
# Go-specific included files (different paths from Python)
134-
# Only triggers when Go-specific template files change
165+
# Go-specific included files - auto-derives deployment target from combo value
135166
go_agent_testing_included_files = {
136-
"adk_go-cloud_run" = [
137-
# Go agent-specific files
167+
for combo in local.agent_testing_combinations :
168+
combo.name => [
138169
"agent_starter_pack/agents/adk_go/**",
139-
# Shared base template (affects all languages)
140170
"agent_starter_pack/base_templates/_shared/**",
141-
# Go base template
142171
"agent_starter_pack/base_templates/go/**",
143-
# Go deployment target (Cloud Run only for Go)
144-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
145-
"agent_starter_pack/deployment_targets/cloud_run/go/**",
146-
# Common files
172+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
173+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/go/**",
147174
"agent_starter_pack/cli/**",
148175
"tests/integration/test_template_linting.py",
149176
"tests/integration/test_templated_patterns.py",
150177
"agent_starter_pack/resources/locks/**",
151178
"pyproject.toml",
152179
"uv.lock",
153-
]
180+
] if endswith(split(",", combo.value)[0], "_go")
154181
}
155182

156-
# Java-specific included files (different paths from Python)
157-
# Only triggers when Java-specific template files change
183+
# Java-specific included files - auto-derives deployment target from combo value
158184
java_agent_testing_included_files = {
159-
"adk_java-cloud_run" = [
160-
# Java agent-specific files
185+
for combo in local.agent_testing_combinations :
186+
combo.name => [
161187
"agent_starter_pack/agents/adk_java/**",
162-
# Shared base template (affects all languages)
163188
"agent_starter_pack/base_templates/_shared/**",
164-
# Java base template
165189
"agent_starter_pack/base_templates/java/**",
166-
# Java deployment target (Cloud Run only for Java)
167-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
168-
"agent_starter_pack/deployment_targets/cloud_run/java/**",
169-
# Common files
190+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
191+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/java/**",
170192
"agent_starter_pack/cli/**",
171193
"tests/integration/test_template_linting.py",
172194
"tests/integration/test_templated_patterns.py",
173195
"pyproject.toml",
174196
"uv.lock",
175-
]
197+
] if endswith(split(",", combo.value)[0], "_java")
176198
}
177199

178-
# TypeScript-specific included files (different paths from Python)
179-
# Only triggers when TypeScript-specific template files change
200+
# TypeScript-specific included files - auto-derives deployment target from combo value
180201
ts_agent_testing_included_files = {
181-
"adk_ts-cloud_run" = [
182-
# TypeScript agent-specific files
202+
for combo in local.agent_testing_combinations :
203+
combo.name => [
183204
"agent_starter_pack/agents/adk_ts/**",
184-
# Shared base template (affects all languages)
185205
"agent_starter_pack/base_templates/_shared/**",
186-
# TypeScript base template
187206
"agent_starter_pack/base_templates/typescript/**",
188-
# TypeScript deployment target (Cloud Run only for TypeScript)
189-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
190-
"agent_starter_pack/deployment_targets/cloud_run/typescript/**",
191-
# Common files
207+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
208+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/typescript/**",
192209
"agent_starter_pack/cli/**",
193210
"tests/integration/test_template_linting.py",
194211
"tests/integration/test_templated_patterns.py",
195212
"agent_starter_pack/resources/locks/**",
196213
"pyproject.toml",
197214
"uv.lock",
198-
]
215+
] if endswith(split(",", combo.value)[0], "_ts")
199216
}
200217

201218
agent_testing_included_files = {
@@ -213,11 +230,9 @@ locals {
213230
# Shared and Python base templates only (not Go/Java/TypeScript)
214231
"agent_starter_pack/base_templates/_shared/**",
215232
"agent_starter_pack/base_templates/python/**",
216-
# Python deployment targets only (not Go/Java/TypeScript)
217-
"agent_starter_pack/deployment_targets/agent_engine/_shared/**",
218-
"agent_starter_pack/deployment_targets/agent_engine/python/**",
219-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
220-
"agent_starter_pack/deployment_targets/cloud_run/python/**",
233+
# Deployment target derived from combo value
234+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
235+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/python/**",
221236
"tests/integration/test_template_linting.py",
222237
"tests/integration/test_templated_patterns.py",
223238
"agent_starter_pack/resources/locks/**",
@@ -295,74 +310,75 @@ locals {
295310
name = "adk_ts-cloud_run"
296311
value = "adk_ts,cloud_run"
297312
},
313+
{
314+
name = "adk-gke"
315+
value = "adk,gke"
316+
},
317+
{
318+
name = "langgraph-gke"
319+
value = "langgraph,gke"
320+
},
321+
{
322+
name = "agentic_rag-gke-vertex_ai_search"
323+
value = "agentic_rag,gke,--datastore,vertex_ai_search"
324+
},
325+
{
326+
name = "adk_live-gke"
327+
value = "adk_live,gke"
328+
},
329+
{
330+
name = "adk_a2a-gke"
331+
value = "adk_a2a,gke"
332+
},
333+
{
334+
name = "adk_go-gke"
335+
value = "adk_go,gke"
336+
},
337+
{
338+
name = "adk_java-gke"
339+
value = "adk_java,gke"
340+
},
341+
{
342+
name = "adk_ts-gke"
343+
value = "adk_ts,gke"
344+
},
298345
]
299346

300-
# Go-specific E2E included files
301-
# Only triggers when Go-specific template files change
347+
# Sentinel combos watch broad paths (cli, templates, pyproject.toml, etc.)
348+
# All other combos only watch agent-specific + deployment-target-specific paths.
349+
e2e_sentinel_combos = toset(["adk-agent_engine", "adk-cloud_run", "adk-gke"])
350+
351+
# Go-specific E2E included files - auto-derives deployment target from combo value
302352
go_e2e_agent_deployment_included_files = {
303-
"adk_go-cloud_run" = [
304-
# Go agent-specific files
353+
for combo in local.e2e_agent_deployment_combinations :
354+
combo.name => [
305355
"agent_starter_pack/agents/adk_go/**",
306-
# Shared base template
307-
"agent_starter_pack/base_templates/_shared/**",
308-
# Go base template
309356
"agent_starter_pack/base_templates/go/**",
310-
# Go deployment target (Cloud Run only for Go)
311-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
312-
"agent_starter_pack/deployment_targets/cloud_run/go/**",
313-
# Common files
314-
"agent_starter_pack/cli/**",
315-
"tests/cicd/test_e2e_deployment.py",
316-
"agent_starter_pack/resources/locks/**",
317-
"pyproject.toml",
318-
"uv.lock",
319-
".cloudbuild/**",
320-
]
357+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
358+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/go/**",
359+
] if endswith(split(",", combo.value)[0], "_go")
321360
}
322361

323-
# Java-specific E2E included files
324-
# Only triggers when Java-specific template files change
362+
# Java-specific E2E included files - auto-derives deployment target from combo value
325363
java_e2e_agent_deployment_included_files = {
326-
"adk_java-cloud_run" = [
327-
# Java agent-specific files
364+
for combo in local.e2e_agent_deployment_combinations :
365+
combo.name => [
328366
"agent_starter_pack/agents/adk_java/**",
329-
# Shared base template
330-
"agent_starter_pack/base_templates/_shared/**",
331-
# Java base template
332367
"agent_starter_pack/base_templates/java/**",
333-
# Java deployment target (Cloud Run only for Java)
334-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
335-
"agent_starter_pack/deployment_targets/cloud_run/java/**",
336-
# Common files
337-
"agent_starter_pack/cli/**",
338-
"tests/cicd/test_e2e_deployment.py",
339-
"pyproject.toml",
340-
"uv.lock",
341-
".cloudbuild/**",
342-
]
368+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
369+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/java/**",
370+
] if endswith(split(",", combo.value)[0], "_java")
343371
}
344372

345-
# TypeScript-specific E2E included files
346-
# Only triggers when TypeScript-specific template files change
373+
# TypeScript-specific E2E included files - auto-derives deployment target from combo value
347374
ts_e2e_agent_deployment_included_files = {
348-
"adk_ts-cloud_run" = [
349-
# TypeScript agent-specific files
375+
for combo in local.e2e_agent_deployment_combinations :
376+
combo.name => [
350377
"agent_starter_pack/agents/adk_ts/**",
351-
# Shared base template
352-
"agent_starter_pack/base_templates/_shared/**",
353-
# TypeScript base template
354378
"agent_starter_pack/base_templates/typescript/**",
355-
# TypeScript deployment target (Cloud Run only for TypeScript)
356-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
357-
"agent_starter_pack/deployment_targets/cloud_run/typescript/**",
358-
# Common files
359-
"agent_starter_pack/cli/**",
360-
"tests/cicd/test_e2e_deployment.py",
361-
"agent_starter_pack/resources/locks/**",
362-
"pyproject.toml",
363-
"uv.lock",
364-
".cloudbuild/**",
365-
]
379+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
380+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/typescript/**",
381+
] if endswith(split(",", combo.value)[0], "_ts")
366382
}
367383

368384
# Create a safe trigger name by replacing underscores with hyphens and dots with hyphens
@@ -385,33 +401,35 @@ locals {
385401
# Cloud SQL is Python Cloud Run only
386402
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
387403
"agent_starter_pack/deployment_targets/cloud_run/python/**",
388-
"pyproject.toml",
389404
] : substr(combo.name, 0, 11) == "agentic_rag" ? [
390405
"agent_starter_pack/agents/agentic_rag/**/*",
391406
"agent_starter_pack/agents/agentic_rag/data_ingestion/**/*",
392-
"pyproject.toml",
407+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
408+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/python/**",
393409
] : substr(combo.name, 0, 8) == "adk_live" ? [
394410
"agent_starter_pack/agents/adk_live/**/*",
395-
"pyproject.toml",
396-
] : [
397-
# Only include files for the specific agent being tested
411+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
412+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/python/**",
413+
] :
414+
contains(local.e2e_sentinel_combos, combo.name) ? [
415+
# Sentinel: broad paths - catches CLI, template, and dependency changes
398416
"agent_starter_pack/agents/${split(",", combo.value)[0]}/**",
399-
# Common files that affect all agents
400417
"agent_starter_pack/cli/**",
401-
# Shared and Python base templates only (not Go/Java/TypeScript)
402418
"agent_starter_pack/base_templates/_shared/**",
403419
"agent_starter_pack/base_templates/python/**",
404420
"agent_starter_pack/agents/agentic_rag/data_ingestion/**",
405-
# Python deployment targets only (not Go/Java/TypeScript)
406-
"agent_starter_pack/deployment_targets/agent_engine/_shared/**",
407-
"agent_starter_pack/deployment_targets/agent_engine/python/**",
408-
"agent_starter_pack/deployment_targets/cloud_run/_shared/**",
409-
"agent_starter_pack/deployment_targets/cloud_run/python/**",
421+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
422+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/python/**",
410423
"tests/cicd/test_e2e_deployment.py",
411424
"agent_starter_pack/resources/locks/**",
412425
"pyproject.toml",
413426
"uv.lock",
414427
".cloudbuild/**",
428+
] : [
429+
# Non-sentinel: only agent + deployment target paths
430+
"agent_starter_pack/agents/${split(",", combo.value)[0]}/**",
431+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/_shared/**",
432+
"agent_starter_pack/deployment_targets/${split(",", combo.value)[1]}/python/**",
415433
]
416434
)
417435
}

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Agent Starter Pack is a **template generator**, not a runtime framework. The CLI
2020
Templates are processed in order, with later layers overriding earlier ones:
2121

2222
1. **Base Templates** (`agent_starter_pack/base_templates/<language>/`) - Core Jinja scaffolding (Python, Go, more coming)
23-
2. **Deployment Targets** (`agent_starter_pack/deployment_targets/`) - Environment-specific overrides (cloud_run, agent_engine)
23+
2. **Deployment Targets** (`agent_starter_pack/deployment_targets/`) - Environment-specific overrides (cloud_run, gke, agent_engine)
2424
3. **Frontend Types** (`agent_starter_pack/frontends/`) - UI-specific files
2525
4. **Agent Templates** (`agent_starter_pack/agents/*/`) - Agent-specific logic and configurations
2626

GEMINI.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Template processing follows this hierarchy (later layers override earlier ones):
2828
| Layer | Directory | Purpose |
2929
|-------|-----------|---------|
3030
| 1. Base | `agent_starter_pack/base_templates/<language>/` | Core Jinja scaffolding (Python, Go, more coming) |
31-
| 2. Deployment | `agent_starter_pack/deployment_targets/` | Environment overrides (cloud_run, agent_engine) |
31+
| 2. Deployment | `agent_starter_pack/deployment_targets/` | Environment overrides (cloud_run, gke, agent_engine) |
3232
| 3. Frontend | `agent_starter_pack/frontends/` | UI-specific files |
3333
| 4. Agent | `agent_starter_pack/agents/*/` | Agent-specific logic and configurations |
3434

@@ -54,7 +54,8 @@ agent_starter_pack/
5454
│ └── go/ # Go project template
5555
├── deployment_targets/ # Environment-specific overrides
5656
│ ├── agent_engine/ # Agent Engine deployment
57-
│ └── cloud_run/ # Cloud Run deployment
57+
│ ├── cloud_run/ # Cloud Run deployment
58+
│ └── gke/ # GKE Autopilot deployment
5859
├── frontends/ # UI templates
5960
└── cli/ # CLI implementation
6061
├── commands/ # create, setup-cicd, enhance, etc.
@@ -368,7 +369,7 @@ some_code()
368369
| Dimension | Options |
369370
|-----------|---------|
370371
| Agents | adk, adk_a2a, adk_go, adk_live, agentic_rag, langgraph |
371-
| Deployments | cloud_run, agent_engine |
372+
| Deployments | cloud_run, gke, agent_engine |
372373
| Session types | in_memory, cloud_sql, agent_engine |
373374
| Features | data_ingestion, frontend_type |
374375

@@ -402,9 +403,15 @@ _TEST_AGENT_COMBINATION="adk,agent_engine" make lint-templated-agents
402403
_TEST_AGENT_COMBINATION="adk_live,agent_engine" make lint-templated-agents
403404
_TEST_AGENT_COMBINATION="langgraph,agent_engine" make lint-templated-agents
404405

406+
# GKE combinations (Python)
407+
_TEST_AGENT_COMBINATION="adk,gke,--session-type,in_memory" make lint-templated-agents
408+
405409
# Go template testing
406410
_TEST_AGENT_COMBINATION="adk_go,cloud_run" make lint-templated-agents
407411

412+
# Go template testing (GKE)
413+
_TEST_AGENT_COMBINATION="adk_go,gke" make lint-templated-agents
414+
408415
# With session type variations
409416
_TEST_AGENT_COMBINATION="adk,cloud_run,--session-type,agent_engine" make lint-templated-agents
410417
```
@@ -663,6 +670,9 @@ uv run agent-starter-pack create test-$(date +%s) -p -s -y -d agent_engine --out
663670
# Cloud Run with session type
664671
uv run agent-starter-pack create test-$(date +%s) -p -s -y -d cloud_run --session-type in_memory --output-dir target
665672

673+
# GKE with session type
674+
uv run agent-starter-pack create test-$(date +%s) -p -s -y -d gke --session-type in_memory --output-dir target
675+
666676
# Full project with CI/CD
667677
uv run agent-starter-pack create test-$(date +%s) -s -y -d agent_engine --cicd-runner google_cloud_build --output-dir target
668678
```

agent_starter_pack/agents/adk/.template/templateconfig.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ example_question: "What's the weather in San Francisco?"
1717
settings:
1818
requires_data_ingestion: false
1919
requires_session: true
20-
deployment_targets: ["agent_engine", "cloud_run", "none"]
20+
deployment_targets: ["agent_engine", "cloud_run", "gke", "none"]
2121
extra_dependencies: ["google-adk>=1.15.0,<2.0.0"]
2222
tags: ["adk"]
2323
frontend_type: "None"

agent_starter_pack/agents/adk_a2a/.template/templateconfig.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ description: "ReAct agent with A2A protocol [experimental]"
1616
example_question: "What's the weather in San Francisco?"
1717
settings:
1818
requires_data_ingestion: false
19-
deployment_targets: ["agent_engine", "cloud_run", "none"]
19+
deployment_targets: ["agent_engine", "cloud_run", "gke", "none"]
2020
extra_dependencies: ["google-adk>=1.16.0,<2.0.0", "a2a-sdk~=0.3.22", "nest-asyncio>=1.6.0,<2.0.0"]
2121
tags: ["adk", "a2a"]
2222
frontend_type: "None"

0 commit comments

Comments
 (0)