services:
  setup:
    build:
      context: .
      dockerfile: ./docker/Dockerfile

  runUnitTests:
    depends_on:
      setup:
        condition: service_completed_successfully
    image: php:8.3-rc-alpine3.18
    working_dir: /app
    command: >
      /bin/sh -c "vendor/bin/phpunit -v -c tests/phpunit.xml --coverage-text --strict-coverage --stop-on-risky"
    volumes:
      - .:/app

  runPerfTests:
    depends_on:
      setup:
        condition: service_completed_successfully
    image: php:8.3-rc-alpine3.18
    working_dir: /app
    command: >
      /bin/sh -c "vendor/bin/phpbench run tests/benchmark/MobileDetectBench.php --retry-threshold=1 --iterations=10 --revs=1000 --report=aggregate"
    volumes:
      - .:/app

  runLinting:
    depends_on:
      setup:
        condition: service_completed_successfully
    image: php:8.3-rc-alpine3.18
    working_dir: /app
    command: >
      /bin/sh -c "vendor/bin/phpcs; vendor/bin/phpcbf"
    volumes:
      - .:/app

  generateModel:
    depends_on:
      setup:
        condition: service_completed_successfully
      runUnitTests:
        condition: service_completed_successfully
      runPerfTests:
        condition: service_completed_successfully
      runLinting:
        condition: service_completed_successfully
    image: php:8.3-rc-alpine3.18
    working_dir: /app
    command: >
      /bin/sh -c "php ./scripts/export_to_json.php"
    volumes:
      - .:/app


