Skip to content

Commit 2a22fc3

Browse files
committed
fix(showcase): harden docker-compose.local.yml for CLI parity testing
Add x-integration-defaults YAML anchor to DRY 17 service definitions. Switch aimock from local build to ghcr.io/copilotkit/aimock:latest. Add healthchecks to all 20 services (internal ports, not host-mapped). Add pocketbase and dashboard infra services with proper depends_on conditions. Add profiles to every service so compose enumeration works.
1 parent 12c230a commit 2a22fc3

1 file changed

Lines changed: 104 additions & 37 deletions

File tree

showcase/docker-compose.local.yml

Lines changed: 104 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,168 +2,235 @@
22
# Prereq: run scripts/dev-local.sh which dereferences tools/ and shared-tools/ symlinks into each package build context first.
33
# Ports come from shared/local-ports.json; internal port is always 10000 (Railway convention).
44

5+
x-integration-defaults: &integration-defaults
6+
env_file: .env
7+
environment:
8+
- OPENAI_API_KEY=${OPENAI_API_KEY:-sk-mock}
9+
- OPENAI_BASE_URL=http://aimock:4010/v1
10+
- AIMOCK_URL=http://aimock:4010
11+
depends_on:
12+
aimock:
13+
condition: service_healthy
14+
restart: unless-stopped
15+
healthcheck:
16+
test: ["CMD", "curl", "-f", "http://localhost:10000/health"]
17+
interval: 5s
18+
timeout: 3s
19+
retries: 5
20+
start_period: 15s
21+
522
services:
623
aimock:
724
# Local aimock so the 17 integration containers can hit a stable LLM mock
825
# on the compose network at http://aimock:4010 instead of the prod Railway
926
# aimock (which can OOM) or direct-to-OpenAI (which costs).
10-
build: ./aimock
11-
image: showcase-aimock:local
27+
image: ghcr.io/copilotkit/aimock:latest
1228
container_name: showcase-aimock
1329
env_file: .env
1430
ports:
1531
- "4010:4010"
16-
restart: unless-stopped
32+
profiles: ["infra", "all"]
33+
restart: unless-stopped
34+
healthcheck:
35+
test: ["CMD", "curl", "-f", "http://localhost:4010/health"]
36+
interval: 5s
37+
timeout: 3s
38+
retries: 5
39+
start_period: 10s
40+
41+
pocketbase:
42+
build: ./pocketbase
43+
image: showcase-pocketbase:local
44+
container_name: showcase-pocketbase
45+
environment:
46+
- POCKETBASE_SUPERUSER_EMAIL=admin@localhost
47+
- POCKETBASE_SUPERUSER_PASSWORD=showcase-local-dev
48+
ports:
49+
- "8090:8090"
50+
volumes:
51+
- showcase-pb-data:/pb_data
52+
profiles: ["infra", "all"]
53+
restart: unless-stopped
54+
healthcheck:
55+
test: ["CMD", "curl", "-f", "http://localhost:8090/api/health"]
56+
interval: 5s
57+
timeout: 3s
58+
retries: 5
59+
start_period: 10s
60+
61+
dashboard:
62+
build: ./shell-dashboard
63+
image: showcase-dashboard:local
64+
container_name: showcase-dashboard
65+
environment:
66+
- POCKETBASE_URL=http://pocketbase:8090
67+
- SHOWCASE_LOCAL=1
68+
ports:
69+
- "3200:10000"
70+
depends_on:
71+
pocketbase:
72+
condition: service_healthy
73+
profiles: ["infra", "all"]
74+
restart: unless-stopped
75+
healthcheck:
76+
test: ["CMD", "curl", "-f", "http://localhost:10000/"]
77+
interval: 5s
78+
timeout: 3s
79+
retries: 5
80+
start_period: 10s
1781

1882
langgraph-python:
83+
<<: *integration-defaults
1984
build: ./integrations/langgraph-python
2085
image: showcase-langgraph-python:local
2186
container_name: showcase-langgraph-python
22-
env_file: .env
2387
ports:
2488
- "3100:10000"
25-
restart: unless-stopped
89+
profiles: ["langgraph-python", "all"]
2690

2791
langgraph-typescript:
92+
<<: *integration-defaults
2893
build: ./integrations/langgraph-typescript
2994
image: showcase-langgraph-typescript:local
3095
container_name: showcase-langgraph-typescript
31-
env_file: .env
3296
ports:
3397
- "3101:10000"
34-
restart: unless-stopped
98+
profiles: ["langgraph-typescript", "all"]
3599

36100
langgraph-fastapi:
101+
<<: *integration-defaults
37102
build: ./integrations/langgraph-fastapi
38103
image: showcase-langgraph-fastapi:local
39104
container_name: showcase-langgraph-fastapi
40-
env_file: .env
41105
ports:
42106
- "3102:10000"
43-
restart: unless-stopped
107+
profiles: ["langgraph-fastapi", "all"]
44108

45109
google-adk:
110+
<<: *integration-defaults
46111
build: ./integrations/google-adk
47112
image: showcase-google-adk:local
48113
container_name: showcase-google-adk
49-
env_file: .env
50114
ports:
51115
- "3103:10000"
52-
restart: unless-stopped
116+
profiles: ["google-adk", "all"]
53117

54118
mastra:
119+
<<: *integration-defaults
55120
build: ./integrations/mastra
56121
image: showcase-mastra:local
57122
container_name: showcase-mastra
58-
env_file: .env
59123
ports:
60124
- "3104:10000"
61-
restart: unless-stopped
125+
profiles: ["mastra", "all"]
62126

63127
crewai-crews:
128+
<<: *integration-defaults
64129
build: ./integrations/crewai-crews
65130
image: showcase-crewai-crews:local
66131
container_name: showcase-crewai-crews
67-
env_file: .env
68132
ports:
69133
- "3105:10000"
70-
restart: unless-stopped
134+
profiles: ["crewai-crews", "all"]
71135

72136
pydantic-ai:
137+
<<: *integration-defaults
73138
build: ./integrations/pydantic-ai
74139
image: showcase-pydantic-ai:local
75140
container_name: showcase-pydantic-ai
76-
env_file: .env
77141
ports:
78142
- "3106:10000"
79-
restart: unless-stopped
143+
profiles: ["pydantic-ai", "all"]
80144

81145
claude-sdk-python:
146+
<<: *integration-defaults
82147
build: ./integrations/claude-sdk-python
83148
image: showcase-claude-sdk-python:local
84149
container_name: showcase-claude-sdk-python
85-
env_file: .env
86150
ports:
87151
- "3107:10000"
88-
restart: unless-stopped
152+
profiles: ["claude-sdk-python", "all"]
89153

90154
claude-sdk-typescript:
155+
<<: *integration-defaults
91156
build: ./integrations/claude-sdk-typescript
92157
image: showcase-claude-sdk-typescript:local
93158
container_name: showcase-claude-sdk-typescript
94-
env_file: .env
95159
ports:
96160
- "3108:10000"
97-
restart: unless-stopped
161+
profiles: ["claude-sdk-typescript", "all"]
98162

99163
agno:
164+
<<: *integration-defaults
100165
build: ./integrations/agno
101166
image: showcase-agno:local
102167
container_name: showcase-agno
103-
env_file: .env
104168
ports:
105169
- "3109:10000"
106-
restart: unless-stopped
170+
profiles: ["agno", "all"]
107171

108172
ag2:
173+
<<: *integration-defaults
109174
build: ./integrations/ag2
110175
image: showcase-ag2:local
111176
container_name: showcase-ag2
112-
env_file: .env
113177
ports:
114178
- "3110:10000"
115-
restart: unless-stopped
179+
profiles: ["ag2", "all"]
116180

117181
llamaindex:
182+
<<: *integration-defaults
118183
build: ./integrations/llamaindex
119184
image: showcase-llamaindex:local
120185
container_name: showcase-llamaindex
121-
env_file: .env
122186
ports:
123187
- "3111:10000"
124-
restart: unless-stopped
188+
profiles: ["llamaindex", "all"]
125189

126190
strands:
191+
<<: *integration-defaults
127192
build: ./integrations/strands
128193
image: showcase-strands:local
129194
container_name: showcase-strands
130-
env_file: .env
131195
ports:
132196
- "3112:10000"
133-
restart: unless-stopped
197+
profiles: ["strands", "all"]
134198

135199
langroid:
200+
<<: *integration-defaults
136201
build: ./integrations/langroid
137202
image: showcase-langroid:local
138203
container_name: showcase-langroid
139-
env_file: .env
140204
ports:
141205
- "3113:10000"
142-
restart: unless-stopped
206+
profiles: ["langroid", "all"]
143207

144208
ms-agent-python:
209+
<<: *integration-defaults
145210
build: ./integrations/ms-agent-python
146211
image: showcase-ms-agent-python:local
147212
container_name: showcase-ms-agent-python
148-
env_file: .env
149213
ports:
150214
- "3114:10000"
151-
restart: unless-stopped
215+
profiles: ["ms-agent-python", "all"]
152216

153217
ms-agent-dotnet:
218+
<<: *integration-defaults
154219
build: ./integrations/ms-agent-dotnet
155220
image: showcase-ms-agent-dotnet:local
156221
container_name: showcase-ms-agent-dotnet
157-
env_file: .env
158222
ports:
159223
- "3115:10000"
160-
restart: unless-stopped
224+
profiles: ["ms-agent-dotnet", "all"]
161225

162226
spring-ai:
227+
<<: *integration-defaults
163228
build: ./integrations/spring-ai
164229
image: showcase-spring-ai:local
165230
container_name: showcase-spring-ai
166-
env_file: .env
167231
ports:
168232
- "3116:10000"
169-
restart: unless-stopped
233+
profiles: ["spring-ai", "all"]
234+
235+
volumes:
236+
showcase-pb-data:

0 commit comments

Comments
 (0)