x-project-defaults: &project-defaults
  working_dir: /app
  platform: linux/amd64

x-env-defaults: &env-defaults
  ENV: development
  NODE_ENV: development

x-db-creds: &db-creds
  MYSQL_DB_HOST: abacus-contract-mysql
  MYSQL_DB_PORT: 3306
  MYSQL_DATABASE: royalty_accounting
  MYSQL_USER: royalties
  MYSQL_PASSWORD: 1234
  MYSQL_ROOT_PASSWORD: root

secrets:
  GITHUB_NPM_TOKEN:
    environment: GITHUB_NPM_TOKEN

services:
  frontend-royalties:
    <<: *project-defaults
    depends_on:
      - graphql-router
    build:
      context: ../frontend-royalties
      secrets:
        - GITHUB_NPM_TOKEN
    volumes:
      - ../frontend-royalties:/app
    command: yarn start
    environment:
      <<: *env-defaults
      CLI_SERVER_HOST: 0.0.0.0
      GITHUB_NPM_TOKEN: $GITHUB_NPM_TOKEN
      GRAPHQL_URL: http://localhost:8082/graphql
    ports:
      - "8080:8080"

  #
  # GraphQL Service Layer
  #
  graphql-router:
    <<: *project-defaults
    depends_on:
      - graphql-abacus
    build:
      context: ../graphql-router
      target: dev
    volumes:
      - ../graphql-router:/app
    environment:
      - PORT: 8082
    ports:
      - "8082:8082"
  graphql-abacus:
    <<: *project-defaults
    depends_on:
      - ows-abacus-contract
      - ows-abacus-account
    build:
      context: ../graphql-abacus
      secrets:
        - GITHUB_NPM_TOKEN
      target: dev
    volumes:
      - ../graphql-abacus:/app
    environment:
      <<: *env-defaults
      PORT: 8081
      ENV: qa
      NODE_ENV: dev
      LOG_LEVEL: info
      DD_TRACE_ENABLED: false
      ENABLE_JWT_SERVICE_CACHE: false
      GITHUB_NPM_TOKEN: /run/secrets/GITHUB_NPM_TOKEN
      AUTH_ISSUERS: 'https://qalogin.theorchard.com/, https://qa-orchard.auth0.com/'
      APOLLO_INTROSPECTION: true
      APOLLO_PLAYGROUND: true
      BUCKET_UPLOAD_ROLE_ARN: arn:aws:iam::437795906767:role/qa-graphql-abacus-browser-upload-role
      BUCKET_UPLOAD_TOKEN_DURATION: 3600
      OWS_ABACUS_ACCOUNT_URL: http://ows-abacus-account:5001
      OWS_ABACUS_CONTRACT_URL: http://ows-abacus-contract:5000
    ports:
      - "8081:8081"

  #
  # Orchard Services Layer
  #
  ows-abacus-contract:
    <<: *project-defaults
    depends_on:
      - abacus-contract-liquibase-runner
    build:
      context: ../ows-abacus-contract
      target: dev
    volumes:
      - ../ows-abacus-contract:/app
    environment:
      <<: *db-creds
      PORT: 5000
    ports:
      - "5000:5000"
  ows-abacus-account:
    <<: *project-defaults
    depends_on:
      - abacus-contract-liquibase-runner
      - ows-abacus-contract
    build:
      context: ../ows-abacus-account
      target: dev
    volumes:
      - ../ows-abacus-account:/app
    environment:
      <<: *db-creds
      PORT: 5001
      SCHEMA_REGISTRY_URL: https://dev-schema-registry.dev.theorchard.io
    ports:
      - "5001:5001"

  #
  # Database Layer
  #
  abacus-contract-seeder:
    image: mysql:8.0.36
    depends_on:
      abacus-contract-liquibase-runner:
        condition: service_completed_successfully
    environment:
      <<: *db-creds
    volumes:
      - ./seeds:/seeds
      - ./seeder.sh:/seeder.sh:ro
    command: ["sh", "/seeder.sh"]


  # yanked from ows-abacus-contract's docker-compose.yml
  abacus-contract-mysql:
    image: mysql:8.0.36
    # "Binary logs" are enabled by default in MySQL 8.0 which comes at a performance cost.
    # We can disable it for slightly better performance since we don't need it to run our tests.
    command: "--disable-log-bin"
    environment:
      <<: *db-creds
    ports:
      - "6051:3306"
    tmpfs:
      - "/var/lib/mysql"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot"]
      timeout: 3s
      interval: 1m
      start_period: 3s
  abacus-contract-liquibase-runner:
    depends_on:
      - abacus-contract-mysql
    image: 437795906767.dkr.ecr.us-east-1.amazonaws.com/royalties-liquibase-runner:latest
    environment:
      <<: *db-creds
      MYSQL_DB_NAME: royalty_accounting
      MYSQL_DEPLOY_USER: root
      MYSQL_DEPLOY_PASSWORD: root
      MYSQL_SERVICE_USER: royalties
      GITHUB_USER: theorchard
      GITHUB_REPO: database
      GITHUB_BRANCH: master
      GITHUB_REPO_DIR: royalty_accounting

  #
  # Helpers
  #
  notify-host-systems-ready:
    image: busybox
    depends_on:
      - frontend-royalties
      - graphql-router
      - graphql-abacus
      - ows-abacus-contract
      - ows-abacus-account
      - abacus-contract-seeder
    entrypoint: nc host.docker.internal 9999 && echo systems ready
