version: "2.3"

volumes:
  data:

services:

  test_unit:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    user: node
    command: npm run test:unit:app
    working_dir: /overleaf/services/web
    environment:
      BASE_CONFIG:
      SHARELATEX_CONFIG:
      NODE_OPTIONS: "--unhandled-rejections=strict"

  test_acceptance:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    working_dir: /overleaf/services/web
    env_file: docker-compose.common.env
    environment:
      BASE_CONFIG:
      SHARELATEX_CONFIG:
    extra_hosts:
      - 'www.overleaf.test:127.0.0.1'
    command: npm run test:acceptance:app
    user: root
    depends_on:
      - redis
      - mongo
      - saml
      - ldap

  test_karma:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile.frontend.ci
      args:
        PROJECT_NAME: $PROJECT_NAME
        BRANCH_NAME: $BRANCH_NAME
        BUILD_NUMBER: $BUILD_NUMBER
    working_dir: /overleaf/services/web
    command: npm run test:karma:single
    user: node
    environment:
      NODE_OPTIONS: "--unhandled-rejections=strict"

  test_frontend:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    user: node
    working_dir: /overleaf/services/web
    command: npm run test:frontend
    environment:
      NODE_OPTIONS: "--unhandled-rejections=strict"

  test_frontend_ct:
    build:
      context: .
      dockerfile: ./Dockerfile.frontend_ct
      args:
        PROJECT_NAME: $PROJECT_NAME
        BRANCH_NAME: $BRANCH_NAME
        BUILD_NUMBER: $BUILD_NUMBER
        CYPRESS_IMAGE: $CYPRESS_IMAGE
    working_dir: /overleaf/services/web
    entrypoint: npm
    command:
      - "run"
      - "cypress:run-ct"

  tar:
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER-webpack
    volumes:
      - ./:/tmp/build/
    command: tar -cf /tmp/build/build.tar public/
    user: root

  redis:
    image: redis

  mongo:
    image: mongo:4.2.15

  ldap:
    restart: always
    image: rroemhild/test-openldap:1.1
    # Workaround large memory allocation (using the max-open-files-limit as socket buffer scale).
    # REF: https://github.com/moby/moby/issues/8231#issuecomment-63877553
    # REF: https://github.com/moby/moby/issues/8231#issuecomment-63871343
    command:
      - 'bash'
      - '-c'
      - 'ulimit -n 1024 && exec bash /run.sh'

  saml:
      restart: always
      image: gcr.io/overleaf-ops/saml-test
      environment:
          SAML_BASE_URL_PATH: 'http://saml/simplesaml/'
          SAML_TEST_SP_ENTITY_ID: 'sharelatex-test-saml'
          SAML_TEST_SP_LOCATION: 'http://www.overleaf.test:3000/saml/callback'