Files
pentagi/docker-compose.e2e.yml
Sergey KozyrenkoandClaude Fable 5 179c814bb3 chore(e2e): scope Tier 2 networks and gate pentagi on a healthy mock LLM
The base compose file pins fixed network names, so any network left un-overridden
in this e2e override joins the stack to the developer's live observability and
langfuse networks. Give all three networks e2e-scoped names. Add a healthcheck to
the mock-LLM service and make pentagi depend on service_healthy, so a crash-looping
mock can never read as a started dependency and silently mask itself.

Update frontend/docs/e2e.md to match reality: the stand tier runs @stand only
(flow-run drives a real paid agent and stays local), every mock run rebuilds its
own bundle by design, and the trend/affected-routes notes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 03:59:07 +07:00

73 lines
2.4 KiB
YAML

# Tier-2 e2e stack. Runs beside a developer stack: use its own project name,
# container names, network, and host ports —
#
# docker build -t local/pentagi:e2e .
# PENTAGI_IMAGE=local/pentagi:e2e PENTAGI_LISTEN_PORT=8444 PGVECTOR_LISTEN_PORT=5433 \
# docker compose -p pentagi-e2e --env-file /dev/null \
# -f docker-compose.yml -f docker-compose.e2e.yml \
# up -d --wait --wait-timeout 240 pentagi mock-llm
#
# --env-file /dev/null is load-bearing: without it compose auto-loads the
# developer's .env and the stack inherits live provider keys and DOCKER_HOST.
# (frontend/e2e/tools/run-local-tier.sh wraps all of this.)
# All three base networks get e2e names — the base file gives them fixed
# `name:`s, so leaving any un-overridden would join this stack to the
# developer's live observability/langfuse networks.
networks:
pentagi-network:
name: pentagi-e2e-network
observability-network:
name: pentagi-e2e-observability-network
langfuse-network:
name: pentagi-e2e-langfuse-network
services:
mock-llm:
image: node:24-alpine
container_name: pentagi-e2e-mock-llm
restart: unless-stopped
command: ["node", "/app/server.mjs"]
volumes:
- ./frontend/e2e/mock-llm:/app:ro
networks:
- pentagi-network
# Keeps a crash-looping mock (restart would silently mask it) from ever
# reading as a started dependency.
healthcheck:
test: ["CMD-SHELL", "wget -qO /dev/null http://127.0.0.1:8080/v1/models"]
interval: 3s
timeout: 5s
retries: 20
pentagi:
container_name: pentagi-e2e
depends_on:
pgvector:
condition: service_healthy
mock-llm:
condition: service_healthy
environment:
- LLM_SERVER_URL=http://mock-llm:8080/v1
# The langchaingo client refuses to construct without a token even though
# the mock never checks it.
- LLM_SERVER_KEY=e2e-dummy-key
- LLM_SERVER_MODEL=e2e-mock
- EMBEDDING_PROVIDER=none
# The base service has no healthcheck, so `up --wait` would return before
# goose migrations finish and the API serves. The runtime image is alpine —
# probe with busybox wget, not curl.
healthcheck:
test:
[
"CMD-SHELL",
"wget --no-check-certificate -qO /dev/null https://127.0.0.1:8443/api/v1/info",
]
interval: 3s
timeout: 5s
retries: 60
start_period: 10s
pgvector:
container_name: pentagi-e2e-pgvector