mirror of
https://github.com/karatektus/pl_mail.git
synced 2026-10-25 01:54:10 +00:00
Compose files keep only a short header; the reasoning lives in docs/install. truenas.compose.yaml is gone (the TrueNAS catalog app replaces it) and so is compose.prod.yaml (compose.yaml already runs the published prod image). compose.override.yaml.dist becomes compose.dev.yaml, passed with -f, so there is no untracked copy that compose loads on its own. Docs, CODESTYLE, CONTRIBUTING and the entrypoint's error text follow. Every remaining file resolves to the same `docker compose config` as before. Closes #30 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
118 lines
3.5 KiB
YAML
118 lines
3.5 KiB
YAML
# Test stack for PHPUnit and Playwright, locally and in CI.
|
|
# npm run test:unit:docker / npm run test:e2e:docker
|
|
|
|
name: pl_mail_test
|
|
|
|
x-test-app: &test-app
|
|
build:
|
|
context: .
|
|
target: frankenphp_dev
|
|
image: pl_mail_test-app
|
|
volumes:
|
|
- ./:/app
|
|
- app_var_test:/app/var
|
|
- app_public_assets_test:/app/public/assets
|
|
environment: &test-env
|
|
APP_ENV: test
|
|
APP_DEBUG: "1"
|
|
APP_SECRET: 282065e0f71bf96c0dbcf0496c1f5d3e
|
|
APP_ENCRYPTION_KEY: emL6R8zs0pSXCVV2HvVvbFubriWJIla7kgnqSGqCJ8E=
|
|
DATABASE_URL: postgresql://app:app@database:5432/app?serverVersion=18&charset=utf8
|
|
MESSENGER_TRANSPORT_DSN: in-memory://
|
|
MESSENGER_BULK_DSN: doctrine://default?auto_setup=0
|
|
MAILER_DSN: null://null
|
|
APP_DEV_USER_EMAIL: e2e@plmail.test
|
|
APP_DEV_USER_PASSWORD: e2e-password-change-me
|
|
MERCURE_PUBLIC_URL: http://127.0.0.1:${TEST_HTTP_PORT:-8001}/.well-known/mercure
|
|
MERCURE_COOKIE_NAME: mercure_access_token
|
|
MERCURE_URL: http://mercure/.well-known/mercure
|
|
MERCURE_JWT_SECRET: e2e-mercure-secret-not-for-production
|
|
depends_on:
|
|
database:
|
|
condition: service_healthy
|
|
|
|
services:
|
|
database:
|
|
image: postgres:18-alpine
|
|
environment:
|
|
POSTGRES_DB: app
|
|
POSTGRES_USER: app
|
|
POSTGRES_PASSWORD: app
|
|
healthcheck:
|
|
test: ["CMD", "pg_isready", "-d", "app", "-U", "app"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 10
|
|
volumes:
|
|
- database_data_test:/var/lib/postgresql
|
|
|
|
app-init:
|
|
<<: *test-app
|
|
entrypoint: ["docker-php-entrypoint"]
|
|
restart: "no"
|
|
command:
|
|
- sh
|
|
- -c
|
|
- |
|
|
set -e
|
|
[ -f vendor/autoload_runtime.php ] || composer install --prefer-dist --no-progress --no-interaction
|
|
php bin/console doctrine:database:create --if-not-exists
|
|
php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
|
|
php bin/console importmap:install
|
|
php bin/console tailwind:build \
|
|
|| { sleep 5; php bin/console tailwind:build; } \
|
|
|| { sleep 20; php bin/console tailwind:build; }
|
|
php bin/console asset-map:compile
|
|
php bin/console app:test:seed-user
|
|
php bin/console app:test:seed-user --admin --email=e2e-admin@plmail.test --password=e2e-admin-password
|
|
|
|
mercure:
|
|
image: dunglas/mercure
|
|
environment:
|
|
SERVER_NAME: ":80"
|
|
MERCURE_PUBLISHER_JWT_KEY: e2e-mercure-secret-not-for-production
|
|
MERCURE_SUBSCRIBER_JWT_KEY: e2e-mercure-secret-not-for-production
|
|
MERCURE_TRUSTED_ISSUERS: https://plmail.invalid/.well-known/mercure
|
|
MERCURE_EXTRA_DIRECTIVES: |
|
|
resource_identifier https://plmail.invalid/.well-known/mercure
|
|
cookie_name mercure_access_token
|
|
|
|
app:
|
|
<<: *test-app
|
|
environment:
|
|
<<: *test-env
|
|
SERVER_NAME: ":80"
|
|
ports:
|
|
- "${TEST_HTTP_PORT:-8001}:80"
|
|
depends_on:
|
|
database:
|
|
condition: service_healthy
|
|
app-init:
|
|
condition: service_completed_successfully
|
|
mercure:
|
|
condition: service_healthy
|
|
|
|
worker-bulk:
|
|
<<: *test-app
|
|
command: php bin/console messenger:consume bulk --time-limit=600 --memory-limit=256M -vv
|
|
restart: unless-stopped
|
|
stop_grace_period: 5s
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- grep -lza 'messenger:[c]onsume' /proc/*/cmdline > /dev/null 2>&1
|
|
interval: 5s
|
|
timeout: 3s
|
|
retries: 6
|
|
start_period: 5s
|
|
depends_on:
|
|
database:
|
|
condition: service_healthy
|
|
app-init:
|
|
condition: service_completed_successfully
|
|
|
|
volumes:
|
|
app_var_test:
|
|
app_public_assets_test:
|
|
database_data_test:
|