services:
  game:
    build:
      context: .
      dockerfile: trackmania.Dockerfile
    restart: unless-stopped
    extends:
      file: docker-compose.core.yml
      service: tm
    stdin_open: true
    environment:
      TM_XMLRPC_ALLOWED_REMOTE: xaseco
    volumes:
      - ./data/tm/data:/app/GameData
    healthcheck:
      test: [CMD, bash, -c, echo '' >/dev/tcp/127.0.0.1/5000]
      start_period: 1m
      start_interval: 10s
      interval: 5s
      timeout: 3s
      retries: 5
  downloader:
    extends:
      file: docker-compose.core.yml
      service: xaseco-installer
    volumes:
      - ./initdb.d:/cache/localdb
    healthcheck:
      test: [CMD, bash, -c, ls /cache/localdb/*]
      start_period: 1m
      start_interval: 10s
      interval: 5s
      timeout: 3s
      retries: 5
  xaseco:
    restart: unless-stopped
    extends:
      file: docker-compose.core.yml
      service: xaseco
    depends_on:
      game:
        condition: service_healthy
      db:
        condition: service_healthy
    environment:
      TM_SERVER_HOST: game
      MYSQL_HOST: db
    volumes:
      - ./data/xaseco:/data
  db:
    image: mysql:5
    restart: unless-stopped
    extends:
      file: docker-compose.core.yml
      service: db
    depends_on:
      downloader:
        condition: service_completed_successfully
    command: --sql_mode=""
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
    volumes:
      - ./data/db:/var/lib/mysql
      - ./initdb.d:/docker-entrypoint-initdb.d
    healthcheck:
      test: [CMD, bash, -c, mysqladmin ping -hlocalhost -u "$$MYSQL_USER" -p"$$MYSQL_PASSWORD"]
      timeout: 20s
      retries: 10

volumes:
  tm-server: {}
  xaseco: {}