services:
  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 --sql_mode=NO_ENGINE_SUBSTITUTION"
    platform: linux/amd64
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=royalty_accounting
      - MYSQL_USER=royalties
      - MYSQL_PASSWORD=1234
    ports:
      - "6051:3306"
    tmpfs:
      - "/var/lib/mysql"

  abacus-contract-liquibase-runner:
    image: 437795906767.dkr.ecr.us-east-1.amazonaws.com/royalties-liquibase-runner:latest
    depends_on:
      - abacus-contract-mysql
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - 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

  abacus-contract-ows-abacus-contract:
    image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/ows-abacus-contract:latest
    volumes:
      - .split:/var/app/.split
    depends_on:
      - abacus-contract-liquibase-runner
      - abacus-contract-ows-abacus-account
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_NAME=royalty_accounting
      - NEO4J_URL=$NEO4J_URL
      - NEO4J_USERNAME=$NEO4J_USERNAME
      - NEO4J_PASSWORD=$NEO4J_PASSWORD
      - NEO4J_CREATE_SESSION_RETRIES=$NEO4J_CREATE_SESSION_RETRIES
      - SPLIT_FILE_PATH=/var/app/.split
      - OWSREQUEST_SERVICE_MAP={"ows-abacus-account":"http://abacus-contract-ows-abacus-account:8080"}

  abacus-contract-ows-abacus-account:
    image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/ows-abacus-account:latest
    volumes:
      - .split:/var/app/.split
    depends_on:
      - abacus-contract-liquibase-runner
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_NAME=royalty_accounting
      - NEO4J_URL=$NEO4J_URL
      - NEO4J_USERNAME=$NEO4J_USERNAME
      - NEO4J_PASSWORD=$NEO4J_PASSWORD
      - NEO4J_CREATE_SESSION_RETRIES=$NEO4J_CREATE_SESSION_RETRIES
      - SPLIT_FILE_PATH=/var/app/.split

  abacus-contract-local:
    depends_on:
      - abacus-contract-liquibase-runner
      - abacus-contract-ows-abacus-account
    build:
      context: .
      dockerfile: Dockerfile
      target: deploy
    volumes:
      - .split:/var/app/.split
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_NAME=royalty_accounting
      - NEO4J_URL=$NEO4J_URL
      - NEO4J_USERNAME=$NEO4J_USERNAME
      - NEO4J_PASSWORD=$NEO4J_PASSWORD
      - NEO4J_CREATE_SESSION_RETRIES=$NEO4J_CREATE_SESSION_RETRIES
      - SPLIT_FILE_PATH=/var/app/.split
      - OWSREQUEST_SERVICE_MAP={"ows-abacus-account":"http://abacus-contract-ows-abacus-account:8080"}
    ports:
      - "6352:8080"

  unit-lint:
    depends_on:
      - abacus-contract-liquibase-runner
    build:
      context: .
      target: unit-lint
    volumes:
      - .:/var/app
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_NAME=royalty_accounting
      - MYSQL_TEST_DB_NAME=royalty_accounting_test

  test-integration:
    depends_on:
      - abacus-contract-ows-abacus-contract
    build:
      context: .
      target: test-integration
    volumes:
      - .:/var/app
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_NAME=royalty_accounting
      - QA_BASE_URL=http://abacus-contract-ows-abacus-contract:8080
      - "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID"
      - "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY"
      - "AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN"
      - "AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION"

  test-integration-local:
    depends_on:
      - abacus-contract-local
    build:
      context: .
      target: test-integration
    volumes:
      - .:/var/app
    environment:
      - MYSQL_DB_HOST=abacus-contract-mysql
      - MYSQL_DB_PORT=3306
      - MYSQL_DB_USER=royalties
      - MYSQL_DB_PASS=1234
      - MYSQL_DB_NAME=royalty_accounting
      - QA_BASE_URL=http://abacus-contract-local:8080
      - "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID"
      - "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY"
      - "AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN"
      - "AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION"
