super-productivity/docker-compose.yaml
Johannes Millan 2c740aaddf fix(sync): queue immediate upload triggers before initialization
Adds pending trigger counter to handle operations that occur before
ImmediateUploadService initialization. When triggers are called before
the service is ready, they are queued and replayed when initialization
completes. This prevents race conditions during app startup.

Changes:
- Add _pendingTriggerCount to track triggers before initialization
- Update trigger() to increment counter when not initialized
- Update initialize() to replay queued triggers after setup
- Add unit test for queue replay behavior
- Fix docker-compose.yaml to use NODE_ENV=development for tests

Fixes E2E test: 'handles server storage quota exceeded gracefully'
Also addresses production edge case where fast users might create
tasks during app load before sync service is ready.
2026-01-23 16:52:21 +01:00

93 lines
2.3 KiB
YAML

services:
# PostgreSQL database for SuperSync
db:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_USER: supersync
POSTGRES_PASSWORD: superpassword
POSTGRES_DB: supersync_db
ports:
- '5432:5432'
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U supersync']
interval: 5s
timeout: 5s
retries: 5
# SuperSync server for E2E testing
# Start with: docker compose up -d supersync
# Required for @supersync e2e tests
supersync:
build:
context: .
dockerfile: packages/super-sync-server/Dockerfile.test
env_file: .env
ports:
- '1900:1900'
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
depends_on:
db:
condition: service_healthy
environment:
- NODE_ENV=development
- PORT=1900
- TEST_MODE=true
- TEST_MODE_CONFIRM=yes-i-understand-the-risks
- JWT_SECRET=e2e-test-secret-minimum-32-chars-long-for-security
- CORS_ORIGINS=*
- DATA_DIR=/data
# Prisma connection string
- DATABASE_URL=postgresql://supersync:superpassword@db:5432/supersync_db
healthcheck:
test:
[
'CMD',
'wget',
'--quiet',
'--tries=1',
'--spider',
'http://127.0.0.1:1900/health',
]
interval: 5s
timeout: 5s
retries: 3
start_period: 10s
# Super Productivity app
app:
image: super-productivity/super-productivity:latest
ports:
- '8080:80'
environment:
# Pre-configured defaults for easier setup
WEBDAV_BASE_URL: ${WEBDAV_BASE_URL:-http://localhost:2345/}
WEBDAV_USERNAME: ${WEBDAV_USERNAME:-admin}
WEBDAV_SYNC_FOLDER_PATH: ${WEBDAV_SYNC_FOLDER_PATH:-/}
SYNC_INTERVAL: ${SYNC_INTERVAL:-15}
IS_COMPRESSION_ENABLED: ${IS_COMPRESSION_ENABLED:-true}
IS_ENCRYPTION_ENABLED: ${IS_ENCRYPTION_ENABLED:-false}
# WebDAV sync server
webdav:
image: hacdias/webdav:latest
ports:
- '2345:2345'
volumes:
- ./webdav.yaml:/config.yml:ro
- webdav_data:/data
healthcheck:
test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:2345/']
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
volumes:
db_data:
webdav_data: