language: java

# On 12-12-2017, Travis updated their trusty image, which caused integration tests to fail.
# The group: config instructs Travis to use the previous trusty image.
# Please see https://github.com/druid-io/druid/pull/5155 for more information.
sudo: false
dist: trusty
group: deprecated-2017Q4

jdk:
  - oraclejdk8

cache:
  directories:
    - $HOME/.m2

matrix:
  include:
      # strict compilation
    - env:
        - NAME="strict compilation"
      install: true
      # Strict compilation requires more than 2 GB
      script: MAVEN_OPTS='-Xmx3000m' mvn clean -Pstrict -pl '!benchmarks' compile test-compile -B --fail-at-end

      # processing module test
    - env:
        - NAME="processing module test"
      install: MAVEN_OPTS='-Xmx3000m' mvn install -q -ff -DskipTests -B
      before_script: unset _JAVA_OPTIONS
      script:
        # Set MAVEN_OPTS for Surefire launcher
        - MAVEN_OPTS='-Xmx512m' mvn test -B -pl processing
        - sh -c "dmesg | egrep -i '(oom|out of memory|kill process|killed).*' -C 1 || exit 0"
        - free -m

      # processing module tests with SQL Compatibility enabled
    - env:
        - NAME="processing module test with SQL Compatibility"
      install: MAVEN_OPTS='-Xmx3000m' mvn install -q -ff -DskipTests -B
      before_script: unset _JAVA_OPTIONS
      script:
        # Set MAVEN_OPTS for Surefire launcher
        - MAVEN_OPTS='-Xmx512m' mvn test -B -Ddruid.generic.useDefaultValueForNull=false -pl processing
        - sh -c "dmesg | egrep -i '(oom|out of memory|kill process|killed).*' -C 1 || exit 0"
        - free -m

      # server module test
    - env:
        - NAME="server module test"
      install: MAVEN_OPTS='-Xmx3000m' mvn install -q -ff -DskipTests -B
      before_script: unset _JAVA_OPTIONS
      script:
        # Set MAVEN_OPTS for Surefire launcher
        - MAVEN_OPTS='-Xmx512m' mvn test -B -pl server

      # server module test with SQL Compatibility enabled
    - env:
        - NAME="server module test with SQL Compatibility enabled"
      install: MAVEN_OPTS='-Xmx3000m' mvn install -q -ff -DskipTests -B
      before_script: unset _JAVA_OPTIONS
      script:
        # Set MAVEN_OPTS for Surefire launcher
        - MAVEN_OPTS='-Xmx512m' mvn test -B -pl server -Ddruid.generic.useDefaultValueForNull=false


      # other modules test
    - env:
        - NAME="other modules test"
        - AWS_REGION=us-east-1 # set a aws region for unit tests
      install: MAVEN_OPTS='-Xmx3000m' mvn install -q -ff -DskipTests -B
      before_script: unset _JAVA_OPTIONS
      script:
        # Set MAVEN_OPTS for Surefire launcher
        - MAVEN_OPTS='-Xmx512m' mvn test -B -pl '!processing,!server'
        - sh -c "dmesg | egrep -i '(oom|out of memory|kill process|killed).*' -C 1 || exit 0"
        - free -m

      # other modules test with SQL Compatibility enabled
    - env:
        - NAME="other modules test with SQL Compatibility"
        - AWS_REGION=us-east-1 # set a aws region for unit tests
      install: MAVEN_OPTS='-Xmx3000m' mvn install -q -ff -DskipTests -B
      before_script: unset _JAVA_OPTIONS
      script:
        # Set MAVEN_OPTS for Surefire launcher
        - MAVEN_OPTS='-Xmx512m' mvn test -B -Ddruid.generic.useDefaultValueForNull=false -pl '!processing,!server'
        - sh -c "dmesg | egrep -i '(oom|out of memory|kill process|killed).*' -C 1 || exit 0"
        - free -m

      # run integration tests
    - sudo: required
      services:
        - docker
      env:
        - NAME="integration test"
        - DOCKER_IP=172.17.0.1
      install:
        # Only errors will be shown with the -q option. This is to avoid generating too many logs which make travis build failed.
        - mvn install -q -ff -DskipTests -B
      script:
        - $TRAVIS_BUILD_DIR/ci/travis_script_integration.sh
      after_failure:
        - for v in ~/shared/logs/*.log ; do
          echo $v logtail ======================== ; tail -100 $v ;
          done
        - for v in broker middlemanager overlord router coordinator historical ; do
          echo $v dmesg ======================== ;
          docker exec -it druid-$v sh -c 'dmesg | tail -3' ;
          done