services: # Seed a deterministic bootstrap token for first-run setup E2E flows. # This is only used by the test stack and is safe to keep deterministic. seed-bootstrap-token: image: alpine:3.20 container_name: pulse-test-seed-bootstrap-token environment: - PULSE_E2E_BOOTSTRAP_TOKEN=${PULSE_E2E_BOOTSTRAP_TOKEN:-0123456789abcdef0123456789abcdef0123456789abcdef} volumes: - test-data:/data command: > sh -c "set -e; umask 077; echo \"$$PULSE_E2E_BOOTSTRAP_TOKEN\" > /data/.bootstrap_token" networks: - test-network # Mock GitHub API server for controlled testing mock-github: image: pulse-mock-github:test container_name: pulse-mock-github ports: - "${PULSE_E2E_MOCK_GITHUB_PORT:-8080}:8080" environment: - PORT=8080 - MOCK_BASE_URL=http://mock-github:8080 # Control test scenarios via environment variables - MOCK_CHECKSUM_ERROR=${MOCK_CHECKSUM_ERROR:-false} - MOCK_NETWORK_ERROR=${MOCK_NETWORK_ERROR:-false} - MOCK_RATE_LIMIT=${MOCK_RATE_LIMIT:-false} - MOCK_STALE_RELEASE=${MOCK_STALE_RELEASE:-false} healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"] interval: 5s timeout: 3s retries: 3 start_period: 5s networks: - test-network # Pulse server under test pulse-test: image: pulse:test container_name: pulse-test-server ports: - "${PULSE_E2E_PORT:-7655}:7655" environment: - TZ=UTC # Point to mock GitHub server - PULSE_UPDATE_SERVER=http://mock-github:8080 # Use /data which is already owned by pulse user via entrypoint - PULSE_DATA_DIR=/data # Enable debug logging - PULSE_LOG_LEVEL=debug # Mock mode for faster testing - PULSE_MOCK_MODE=true - PULSE_ALLOW_DOCKER_UPDATES=true - PULSE_UPDATE_STAGE_DELAY_MS=250 volumes: - test-data:/data depends_on: seed-bootstrap-token: condition: service_completed_successfully mock-github: condition: service_healthy healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:7655/api/health"] interval: 5s timeout: 3s retries: 5 start_period: 10s networks: - test-network volumes: test-data: driver: local networks: test-network: driver: bridge