services: setup: build: context: . dockerfile: ./docker/Dockerfile.setup platform: linux/amd64 volumes: - ./vendor:/app/vendor # Example: docker compose -p mobile-detect up --build runUnitTests runUnitTests: # Need xdebug from this image to run with coverage # https://hub.docker.com/r/alcohol/php/tags image: alcohol/php:8.5-xdebug platform: linux/amd64 depends_on: setup: condition: service_completed_successfully working_dir: /app environment: XDEBUG_MODE: coverage command: > /bin/sh -c "vendor/bin/phpunit -v -c tests/phpunit.xml --coverage-html .coverage --strict-coverage --stop-on-risky" volumes: - .:/app runPerfTests: image: php:8.5-alpine platform: linux/amd64 depends_on: setup: condition: service_completed_successfully working_dir: /app # Path/iterations/revs/warmup/retry-threshold come from /phpbench.json. command: > /bin/sh -c "vendor/bin/phpbench run --report=aggregate" volumes: - .:/app runLinting: image: php:8.5-alpine platform: linux/amd64 depends_on: setup: condition: service_completed_successfully working_dir: /app command: > /bin/sh -c "vendor/bin/phpcs; vendor/bin/phpcbf" volumes: - .:/app runQualityCheck: image: php:8.5-alpine platform: linux/amd64 depends_on: setup: condition: service_completed_successfully working_dir: /app command: > /bin/sh -c "vendor/bin/phpstan analyse --debug --memory-limit=1G --level 3 src tests" volumes: - .:/app # Pre-release validation gate - runs all checks # Usage: docker compose -p mobile-detect up --build runAll runAll: image: php:8.5-alpine platform: linux/amd64 depends_on: runLinting: condition: service_completed_successfully runQualityCheck: condition: service_completed_successfully runUnitTests: condition: service_completed_successfully runPerfTests: condition: service_completed_successfully command: > /bin/sh -c "echo '✅ All pre-release checks passed!'" generateJsonModel: image: php:8.5-alpine platform: linux/amd64 depends_on: runAll: condition: service_completed_successfully working_dir: /app command: > /bin/sh -c "php ./scripts/export_to_json.php" volumes: - .:/app