refactor(e2e): migrate to production Dockerfile for E2E tests

Complete E2E Docker migration (Steps 1-3):

1. Add SPA routing support in nginx (try_files directive)
2. Make APP_PORT configurable via environment variable
3. Migrate docker-compose.e2e.yaml from dev server to production build

Changes:
- docker-compose.e2e.yaml: Use production Dockerfile instead of dev server
  - Remove volume mounts (self-contained production build)
  - Add UNSPLASH build args
  - Add WEBDAV_BACKEND environment variable
  - Reduce healthcheck start_period from 120s to 30s (nginx is faster)
- nginx/default.conf.template: Add try_files for SPA routing, use APP_PORT
- docker-entrypoint.sh: Export APP_PORT with default value

Benefits:
- Production build provides more realistic test environment
- Faster startup (30s vs 120s)
- No dependency on local node_modules
- Matches production deployment more closely
This commit is contained in:
Johannes Millan 2026-01-21 12:02:36 +01:00
parent b8d05a2aa7
commit 2fa804c07a
3 changed files with 14 additions and 9 deletions

View file

@ -4,26 +4,26 @@
#
# FAST LOCAL ALTERNATIVE: Run `ng serve` locally + `npm run e2e:webdav` (only webdav in Docker)
services:
# Angular development server for E2E tests
# Uses volume mount to avoid copying/rebuilding node_modules
# Requires: npm install to be run locally first
# Production Angular build for E2E tests
# Uses production Dockerfile with nginx
app:
build:
context: .
dockerfile: Dockerfile.e2e.dev.fast
dockerfile: Dockerfile
args:
UNSPLASH_KEY: ${UNSPLASH_KEY:-DUMMY_UNSPLASH_KEY}
UNSPLASH_CLIENT_ID: ${UNSPLASH_CLIENT_ID:-DUMMY_UNSPLASH_CLIENT_ID}
ports:
- '${APP_PORT:-4242}:${APP_PORT:-4242}'
environment:
- APP_PORT=${APP_PORT:-4242}
volumes:
- .:/app
- /app/.angular # Exclude .angular cache (use container's)
- WEBDAV_BACKEND=${WEBDAV_BACKEND:-}
healthcheck:
test: ['CMD', 'curl', '-sf', 'http://localhost:${APP_PORT:-4242}']
interval: 10s
timeout: 5s
retries: 30
start_period: 120s
start_period: 30s
# WebDAV sync server (for sync tests)
webdav:

View file

@ -1,5 +1,9 @@
#!/bin/sh
# Set default port if not provided
: "${APP_PORT:=80}"
export APP_PORT
# Generate ./assets/sync-config-default-override.json from environment variables
JSON="{}"
JSON_PATH=./assets/sync-config-default-override.json

View file

@ -4,13 +4,14 @@ map "" $webdav_backend {
}
server {
listen 80;
listen ${APP_PORT};
server_name localhost;
# serve super-productivity as static files at the path /
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# forward requests starting with "/webdav/" to $WEBDAV_BACKEND