version: '3.8' services: # Mock GitHub API server for controlled testing mock-github: image: pulse-mock-github:test container_name: pulse-mock-github ports: - "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: - "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 # Pre-configure authentication to bypass first-run setup - PULSE_AUTH_USER=admin - PULSE_AUTH_PASS=admin volumes: - test-data:/data depends_on: 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