# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

language: java

sudo: false

cache:
  directories:
    - .spark-dist
    - ${HOME}/.m2/repository/.cache/maven-download-plugin

addons:
  apt:
    sources:
    - r-packages-precise
    packages:
    - r-base-dev

matrix:
  include:
    # Test all modules with spark 2.0.0 and scala 2.11
    - jdk: "oraclejdk7"
      env: SCALA_VER="2.11" SPARK_VER="2.0.2" HADOOP_VER="2.6" PROFILE="-Pspark-2.0 -Phadoop-2.6 -Ppyspark -Psparkr -Pscalding -Pscala-2.11" BUILD_FLAG="package -Pbuild-distr" TEST_FLAG="verify -Pusing-packaged-distr" TEST_PROJECTS=""

    # Test all modules with scala 2.10
    - jdk: "oraclejdk7"
      env: SCALA_VER="2.10" SPARK_VER="1.6.3" HADOOP_VER="2.6" PROFILE="-Pspark-1.6 -Pr -Phadoop-2.6 -Ppyspark -Psparkr -Pscalding -Pscala-2.10" BUILD_FLAG="package -Pbuild-distr" TEST_FLAG="verify -Pusing-packaged-distr" TEST_PROJECTS=""

    # Test all modules with scala 2.11
    - jdk: "oraclejdk7"
      env: SCALA_VER="2.11" SPARK_VER="1.6.3" HADOOP_VER="2.6" PROFILE="-Pspark-1.6 -Pr -Phadoop-2.6 -Ppyspark -Psparkr -Pscalding -Pscala-2.11" BUILD_FLAG="package -Pbuild-distr" TEST_FLAG="verify -Pusing-packaged-distr" TEST_PROJECTS=""

    # Test selenium with spark module for 1.6.3
    - jdk: "oraclejdk7"
      env: TEST_SELENIUM="true" SCALA_VER="2.10" SPARK_VER="1.6.3" HADOOP_VER="2.6" PROFILE="-Pspark-1.6 -Phadoop-2.6 -Ppyspark" BUILD_FLAG="package -DskipTests" TEST_FLAG="verify" TEST_PROJECTS="-pl zeppelin-interpreter,zeppelin-zengine,zeppelin-server,zeppelin-display,spark-dependencies,spark -Dtest=org.apache.zeppelin.AbstractFunctionalSuite -DfailIfNoTests=false"

before_install:
  - "ls -la .spark-dist ${HOME}/.m2/repository/.cache/maven-download-plugin"
  - mkdir -p ~/R
  - echo 'R_LIBS=~/R' > ~/.Renviron
  - R -e "install.packages('knitr', repos = 'http://cran.us.r-project.org', lib='~/R')"
  - R -e "install.packages('evaluate', repos = 'http://cran.us.r-project.org', lib='~/R')"
  - R -e "install.packages('base64enc', repos = 'http://cran.us.r-project.org', lib='~/R')"
  - export R_LIBS='~/R'
  - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1600x1024x16"
  - ./dev/change_scala_version.sh $SCALA_VER

install:
  - mvn $BUILD_FLAG $PROFILE -B

before_script:
  - travis_retry ./testing/downloadSpark.sh $SPARK_VER $HADOOP_VER
  - ./testing/startSparkCluster.sh $SPARK_VER $HADOOP_VER
  - echo "export SPARK_HOME=`pwd`/spark-$SPARK_VER-bin-hadoop$HADOOP_VER" > conf/zeppelin-env.sh
  - tail conf/zeppelin-env.sh

script:
  - mvn $TEST_FLAG $PROFILE -B $TEST_PROJECTS


after_success:
  - echo "Travis exited with ${TRAVIS_TEST_RESULT}"

after_failure:
  - echo "Travis exited with ${TRAVIS_TEST_RESULT}"
  - cat target/rat.txt
  - cat zeppelin-server/target/rat.txt
  - cat zeppelin-distribution/target/zeppelin-*-SNAPSHOT/zeppelin-*-SNAPSHOT/logs/zeppelin*.log
  - cat zeppelin-distribution/target/zeppelin-*-SNAPSHOT/zeppelin-*-SNAPSHOT/logs/zeppelin*.out
  - cat zeppelin-web/npm-debug.log
  - cat spark-*/logs/*

after_script:
  - ./testing/stopSparkCluster.sh $SPARK_VER $HADOOP_VER
