mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-18 17:05:48 +00:00
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.
93 lines
2.3 KiB
YAML
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:
|