services:
  service:
    platform: linux/amd64
    build:
      context: .
      target: dev
      args:
        DOCKER_BUILDKIT: 1
      secrets:
        - GITHUB_NPM_TOKEN
    environment:
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - ENV=qa
      - PORT=8080
      - NODE_ENV=dev
      - LOG_LEVEL=info
      - DD_TRACE_ENABLED=false
      - ENABLE_JWT_SERVICE_CACHE=false
      - APOLLO_INTROSPECTION=true
      - APOLLO_PLAYGROUND=true
    container_name: graphql-analytics
    ports:
      - '8080:8080'
    volumes:
      - ./src:/var/app/src
  service-deploy:
    platform: linux/amd64
    build:
      context: .
      target: deploy
      args:
        DOCKER_BUILDKIT: 1
      secrets:
        - GITHUB_NPM_TOKEN
    environment:
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - ENV=qa
      - PORT=8080
      - NODE_ENV=dev
      - LOG_LEVEL=info
      - DD_TRACE_ENABLED=false
      - ENABLE_JWT_SERVICE_CACHE=false
      - APOLLO_INTROSPECTION=true
      - APOLLO_PLAYGROUND=true
      - SPLIT_API_KEY=localhost
      - CACHE_USE_REDIS=false
    container_name: graphql-analytics-deploy
    ports:
      - '8081:8080'
    stop_grace_period: 30s
    healthcheck:
      test:
        [
          'CMD-SHELL',
          'node -e "const http = require(''http''); const options = { hostname: ''localhost'', port: 8080, path: ''/graphql'', method: ''POST'', headers: { ''Content-Type'': ''application/json'' } }; const req = http.request(options, (res) => process.exit(res.statusCode === 400 || res.statusCode === 200 ? 0 : 1)); req.on(''error'', () => process.exit(1)); req.write(JSON.stringify({ query: ''{ __typename }'' })); req.end();"',
        ]
      interval: 5s
      timeout: 5s
      retries: 10
      start_period: 30s
  lint-and-test:
    build:
      context: .
      target: lint-and-test
      args:
        - DOCKER_BUILDKIT=1
      secrets:
        - GITHUB_NPM_TOKEN
    environment:
      - NODE_ENV=test
      - ENV=dev
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
  integration-tests:
    build:
      context: .
      target: integration-tests
      args:
        - DOCKER_BUILDKIT=1
      secrets:
        - GITHUB_NPM_TOKEN
    environment:
      - NODE_ENV=test
      - ENV=qa
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - BASE_URL=https://qa-graphql-analytics.theorchard.io/graphql
      - AWS_ACCESS_KEY_ID
      - AWS_DEFAULT_REGION=us-east-1
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
      - 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-analytics-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:-}
  integration-tests-local:
    build:
      context: .
      target: integration-tests
      args:
        - DOCKER_BUILDKIT=1
      secrets:
        - GITHUB_NPM_TOKEN
    environment:
      - NODE_ENV=test
      - ENV=qa
      - GITHUB_NPM_TOKEN=/run/secrets/GITHUB_NPM_TOKEN
      - BASE_URL=http://service-deploy:8080/graphql
      - SPLIT_API_KEY=localhost
      - CACHE_USE_REDIS=false
      - OWS_REQUEST_TRACING=true
      - LOG_LEVEL=debug
      - AWS_ACCESS_KEY_ID
      - AWS_DEFAULT_REGION=us-east-1
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
    depends_on:
      service-deploy:
        condition: service_healthy
secrets:
  GITHUB_NPM_TOKEN:
    environment: 'GITHUB_NPM_TOKEN'
