services:
  # This graphql-nr service connects to our QA DBs
  service:
    platform: linux/amd64
    build:
      context: .
      target: deploy
      args:
        DOCKER_BUILDKIT: 1
      secrets:
        - GITHUB_NPM_TOKEN
    container_name: graphql-neighbouring-rights
    logging:
      options:
        max-size: '1m'
        max-file: '1'
    ports:
      - '8080:8080'
    environment:
      - ENV # set to dev or qa
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - NODE_ENV=dev
      - LOG_LEVEL=info
      - DD_TRACE_ENABLED=false # Prevent datadog tracing
      - ENABLE_JWT_SERVICE_CACHE=true
      - APOLLO_INTROSPECTION=true # Enable apollo features
      - APOLLO_PLAYGROUND=true # Enable apollo features
      - NEO4J_AURA_URL
      - NEO4J_AURA_USERNAME
      - NEO4J_AURA_PASSWORD
      - NEO4J_URL
      - NEO4J_USER
      - NEO4J_PASSWORD
      - SPLIT_API_KEY
      - SENTRY_DSN
      - UPLOAD_BUCKET
      - UPLOAD_ROLE_ARN
      - UPLOAD_TOKEN_DURATION
      - NR_DELIVERY_HOSTNAME
      - NR_DELIVERY_RO_HOSTNAME
      - NR_DELIVERY_RW_MAX_CONNECTIONS
      - NR_DELIVERY_RO_MAX_CONNECTIONS
      - NR_DELIVERY_USERNAME
      - NR_DELIVERY_PASSWORD
      - NR_DELIVERY_DB_NAME
      - NR_OWNERSHIP_DELIVERY_HOSTNAME
      - NR_OWNERSHIP_DELIVERY_RW_MAX_CONNECTIONS
      - NR_OWNERSHIP_DELIVERY_USERNAME
      - NR_OWNERSHIP_DELIVERY_PASSWORD
      - NR_OWNERSHIP_DELIVERY_TEST_USERNAME
      - NR_OWNERSHIP_DELIVERY_TEST_PASSWORD
      - NR_OWNERSHIP_DELIVERY_DB_NAME
      - SFORCE_DOMAIN
      - SFORCE_REFRESH_TOKEN
      - SFORCE_CLIENT_ID
      - SFORCE_CLIENT_SECRET
      - S3_SIGNED_URL_EXPIRY
      - INGESTION_FOLDER
      - KAFKA_BROKERS
      - KAFKA_FILE_INGESTION_TOPIC
      - SCHEMA_REGISTRY_URL
      - KSQL_URL
      - KSQL_CREDS
      - OWNERSHIP_DELIVERY_STEPFN_ARN
  lint-and-test:
    platform: linux/amd64
    build:
      context: .
      target: lint-and-test
      args:
        DOCKER_BUILDKIT: 1
      secrets:
        - GITHUB_NPM_TOKEN
    environment:
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - NODE_ENV=test
      - ENV=test
  local-ownership-rds:
    image: mysql:8.0.32
    container_name: ownershipdeliveryrds
    command: mysqld --sql_mode=""
    environment:
      MYSQL_ROOT_PASSWORD: ownershipPass
      MYSQL_DATABASE: neighbouring_rights_ownership_delivery
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    volumes:
      - ./db/ownership:/docker-entrypoint-initdb.d/:rw
  local-performance-rds:
    image: mysql:8.0.32
    container_name: performancedeliveryrds
    command: mysqld --sql_mode=""
    environment:
      MYSQL_ROOT_PASSWORD: performancePass
      MYSQL_DATABASE: neighbouring_rights_delivery
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    volumes:
      - ./db/performance:/docker-entrypoint-initdb.d/:rw
  local-neo4j:
    image: neo4j:5.26
    healthcheck:
      test: wget http://local-neo4j:7474/
      interval: 30s
      timeout: 30s
      retries: 5
    environment:
      NEO4J_PLUGINS: '["apoc"]'
      NEO4J_AUTH: neo4j/neo4jPass
  service-integration:
    platform: linux/amd64
    # This graphql-nr service connects to local DBs (for integration tests)
    image: 086679231553.dkr.ecr.us-east-1.amazonaws.com/graphql-neighbouring-rights:latest
    pull_policy: always
    depends_on:
      local-ownership-rds:
        condition: service_started
      local-performance-rds:
        condition: service_started
      local-neo4j:
        condition: service_healthy
    healthcheck:
      test: ['CMD', 'curl', 'http://service-integration:8080/health']
      interval: 30s
      timeout: 2s
      retries: 10
    environment:
      - ENV=qa # use qa env so that we pick up the QA secrets needed for the JWT
      - AWS_ACCESS_KEY_ID
      - AWS_PROFILE
      - AWS_REGION
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
      - DD_SERVICE=ows-pdp
      - DD_AGENT_HOST=dev-datadog-agent.dev.theorchard.io
      - DD_TRACE_ENABLED=1
      - DD_PROFILING_ENABLED=1
      - ENABLE_JWT_SERVICE_CACHE=true # enable JWT handling, required for pdp tests
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - KAFKA_BROKERS=b-1.dev-managed-kafka-cdc.rk4es0.c11.kafka.us-east-1.amazonaws.com:9094,b-2.dev-managed-kafka-cdc.rk4es0.c11.kafka.us-east-1.amazonaws.com:9094,b-3.dev-managed-kafka-cdc.rk4es0.c11.kafka.us-east-1.amazonaws.com:9094
      - KAFKA_FILE_INGESTION_TOPIC=event.nr.fileIngestion
      - KSQL_CREDS
      - KSQL_URL=https://qa-ksqldb-server.theorchard.io
      - NEO4J_PASSWORD=neo4jPass
      - NEO4J_URL=neo4j://local-neo4j:7687
      - NEO4J_USER=neo4j
      - NR_DELIVERY_DB_NAME=neighbouring_rights_delivery
      - NR_DELIVERY_HOSTNAME=local-performance-rds
      - NR_DELIVERY_PASSWORD=performancePass
      - NR_DELIVERY_USERNAME=root
      - NR_OWNERSHIP_DELIVERY_DB_NAME=neighbouring_rights_ownership_delivery
      - NR_OWNERSHIP_DELIVERY_HOSTNAME=local-ownership-rds
      - NR_OWNERSHIP_DELIVERY_PASSWORD=ownershipPass
      - NR_OWNERSHIP_DELIVERY_USERNAME=root
      - OWNERSHIP_DELIVERY_STEPFN_ARN=arn:aws:states:us-east-1:437795906767:stateMachine:qa-nr-ownership-delivery
      - OWS_PDP_URL=https://qa-ows-pdp.theorchard.io
      - SCHEMA_REGISTRY_URL=https://dev-schema-registry.dev.theorchard.io
      - SENTRY_DSN
      - SFORCE_CLIENT_ID
      - SFORCE_CLIENT_SECRET
      - SFORCE_DOMAIN=test
      - SFORCE_REFRESH_TOKEN
      - SPLIT_API_KEY
      - UPLOAD_BUCKET=qa-neighbouring-rights
      - UPLOAD_ROLE_ARN=arn:aws:iam::437795906767:role/qa-neighbouring-rights-browser-upload-role
      - UPLOAD_TOKEN_DURATION=3600
  integration-tests:
    platform: linux/amd64
    build:
      context: .
      target: integration-tests
      secrets:
        - GITHUB_NPM_TOKEN
    depends_on:
      service-integration:
        condition: service_healthy
    environment:
      - BASE_URL=http://service-integration:8080/graphql
      - ENV=test
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - NEO4J_PASSWORD=neo4jPass
      - NEO4J_URL=neo4j://local-neo4j:7687
      - NEO4J_USER=neo4j
      - NODE_ENV=test
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
      - AWS_REGION=us-east-1
      - AWS_PROFILE
      - UPLOAD_BUCKET=qa-neighbouring-rights
      - NODE_OPTIONS=${NODE_OPTIONS:-}
      - JOB_NAME=${JOB_NAME:-}
      - JOB_URL=${JOB_URL:-}
      - BUILD_NUMBER=${BUILD_NUMBER:-}
      - BUILD_ID=${BUILD_ID:-}
      - BUILD_TAG=${BUILD_TAG:-}
      - BUILD_URL=${BUILD_URL:-}
      - JENKINS_URL=${JENKINS_URL:-}
      - DD_TEST_SESSION_NAME=integration-tests
      - DD_SERVICE=graphql-neighbouring-rights-integration-tests
      - DD_ENV=qa
      - DD_AGENT_HOST=172.17.0.1
      - WORKSPACE=${WORKSPACE:-}
      - DD_GIT_REPOSITORY_URL=${GIT_URL:-}
      - DD_GIT_COMMIT_SHA=${GIT_COMMIT:-}
      - DD_GIT_BRANCH=${GIT_BRANCH:-}
      - DD_GIT_COMMIT_AUTHOR_NAME=${DD_GIT_COMMIT_AUTHOR_NAME:-}
      - DD_GIT_COMMIT_AUTHOR_EMAIL=${DD_GIT_COMMIT_AUTHOR_EMAIL:-}
      - DD_GIT_COMMIT_AUTHOR_DATE=${DD_GIT_COMMIT_AUTHOR_DATE:-}
secrets:
  GITHUB_NPM_TOKEN:
    environment: 'GITHUB_NPM_TOKEN'
