fetch_ml/deployments/docker-compose.prod.smoke.yml
Jeremie Fraeys b4672a6c25
feat: add TUI SSH usability testing infrastructure
Add comprehensive testing for TUI usability over SSH in production-like environment:

Infrastructure:
- Caddy reverse proxy config for WebSocket and API routing
- Docker Compose with SSH test server container
- TUI test configuration for smoke testing

Test Harness:
- SSH server Go test fixture with container management
- TUI driver with PTY support for automated input/output testing
- 8 E2E tests covering SSH connectivity, TERM propagation,
  API/WebSocket connectivity, and TUI configuration

Scripts:
- SSH key generation for test environment
- Manual testing script with interactive TUI verification

The setup allows automated verification that the BubbleTea TUI works
correctly over SSH with proper terminal handling, alt-screen buffer,
and mouse support through Caddy reverse proxy.
2026-02-18 17:48:02 -05:00

84 lines
2.4 KiB
YAML

services:
caddy:
image: caddy:2-alpine
container_name: ml-smoke-caddy
environment:
- FETCHML_DOMAIN=localhost
ports:
- "8080:80"
volumes:
- ${FETCHML_REPO_ROOT:-..}/deployments/Caddyfile.prod.smoke:/etc/caddy/Caddyfile:ro
- ${FETCHML_REPO_ROOT:-..}/data/prod-smoke/caddy/data:/data
- ${FETCHML_REPO_ROOT:-..}/data/prod-smoke/caddy/config:/config
networks:
- default
depends_on:
- api-server
redis:
image: redis:7-alpine
user: "999:999"
restart: unless-stopped
expose:
- "6379"
volumes:
- ${FETCHML_REPO_ROOT:-..}/data/prod-smoke/redis:/data
command: redis-server --appendonly yes
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 10s
timeout: 5s
retries: 10
api-server:
build:
context: ${FETCHML_REPO_ROOT:-..}
dockerfile: ${FETCHML_REPO_ROOT:-..}/build/docker/simple.Dockerfile
user: "0:0"
restart: unless-stopped
expose:
- "9101"
depends_on:
redis:
condition: service_healthy
volumes:
- ${FETCHML_REPO_ROOT:-..}/data/prod-smoke/experiments:/data/experiments
- ${FETCHML_REPO_ROOT:-..}/data/prod-smoke/active:/data/active
- ${FETCHML_REPO_ROOT:-..}/data/prod-smoke/logs:/logs
- ${FETCHML_REPO_ROOT:-..}/configs/api/dev.yaml:/app/configs/api/dev.yaml:ro
command: ["/bin/sh", "-c", "mkdir -p /data/experiments /data/active/datasets /data/active/snapshots && exec /usr/local/bin/api-server -config /app/configs/api/dev.yaml"]
environment:
- LOG_LEVEL=info
- FETCHML_NATIVE_LIBS=1
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:9101/health" ]
interval: 10s
timeout: 5s
retries: 10
ssh-test-server:
image: linuxserver/openssh-server:latest
container_name: ml-ssh-test
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- PUBLIC_KEY_FILE=/tmp/test_key.pub
- USER_NAME=test
- PASSWORD_ACCESS=false
volumes:
- ${FETCHML_REPO_ROOT:-..}/deployments/test_keys:/tmp:ro
- ${FETCHML_REPO_ROOT:-..}/bin/tui-linux:/usr/local/bin/tui:ro
- ${FETCHML_REPO_ROOT:-..}/deployments/tui-test-config.toml:/config/.ml/config.toml:ro
ports:
- "2222:2222"
networks:
- default
depends_on:
- caddy
- api-server
networks:
default:
name: ml-prod-smoke-network