# 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.

sudo: required

dist: trusty

cache:
  directories:
  - $HOME/.m2

install: true

language: java

branches:
  only:
   - master

env:
  global:
    - JAVA_OPTS=-Xmx3g
    - TEST_MODULES="core,engine"
    - STANDARD_BUILD_OPTS="-Dmaven.javadoc.skip=true -B -V"
    - PROFILES="" # "-Ptravis"
    - SPARK_1_6=http://d3kbcqa49mib13.cloudfront.net/spark-1.6.3-bin-hadoop2.6.tgz
    - SPARK_2_0=http://d3kbcqa49mib13.cloudfront.net/spark-2.0.2-bin-hadoop2.7.tgz
    - SPARK_2_1=http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz
    - SPARK_2_3=https://archive.apache.org/dist/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz

# The file assumes a certain build order for the maven / nightly build deployments.
matrix:
  include:
    # Default Build: Spark 2.3.0, Scala 2.11
    - jdk: "openjdk8"
      env: PROFILES="${PROFILES}" SPARK_BIN=$SPARK_2_3 SCALA_VERSION="2.11"
      
    # Build Spark 1.6.3 , Scala 2.10
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pscala-2.10 -Pspark-1.6" SPARK_BIN=$SPARK_1_6 SCALA_VERSION="2.10"

    # Build Spark 2.0.2 , Scala 2.11 - replace -D... with profiles when available
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pspark-2.0 -Pscala-2.11" SPARK_BIN=$SPARK_2_0 SCALA_VERSION="2.11"

    # Build Spark 2.1.0 , Scala 2.11 - replace -D... with profiles when available
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pspark-2.1 -Pscala-2.11" SPARK_BIN=$SPARK_2_1 SCALA_VERSION="2.11"

    # Build Spark 1.6.3 , Scala 2.10, ViennaCL
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pscala-2.10 -Pviennacl" SPARK_BIN=$SPARK_1_6 SCALA_VERSION="2.10"

    # Build Spark 2.0.2 , Scala 2.11, ViennaCL - replace -D... with profiles when available
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pspark-2.0 -Pscala-2.11 -Pviennacl" SPARK_BIN=$SPARK_2_0 SCALA_VERSION="2.11"

    # Build Spark 2.1.0 , Scala 2.11, ViennaCL - replace -D... with profiles when available
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pspark-2.1 -Pscala-2.11 -Pviennacl" SPARK_BIN=$SPARK_2_1 SCALA_VERSION="2.11"

    # Build Spark 1.6.3 , Scala 2.10, ViennaCL-OMP
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pscala-2.10 -Pviennacl-omp" TEST_MODULES="${TEST_MODULES},viennacl-omp" SPARK_BIN=$SPARK_1_6 SCALA_VERSION="2.10"

    # Build Spark 2.0.2 , Scala 2.11, ViennaCL-OMP - replace -D... with profiles when available
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pspark-2.0 -Pscala-2.11 -Pviennacl-omp" TEST_MODULES="${TEST_MODULES},viennacl-omp" SPARK_BIN=$SPARK_2_0 SCALA_VERSION="2.11"

    # Build Spark 2.1.0 , Scala 2.11, ViennaCL-OMP - replace -D... with profiles when available
    #- jdk: "openjdk7"
    #  env: PROFILES="${PROFILES} -Pspark-2.1 -Pscala-2.11 -Pviennacl-omp" TEST_MODULES="${TEST_MODULES},viennacl-omp" SPARK_BIN=$SPARK_2_1 SCALA_VERSION="2.11"

git:
  depth: 10

#notifications:
#  slack: mahout:7vlbihiCBKuhEZK2610jkeeT

before_install:
# Install Maven 3.3.x+
  - wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.zip
  - unzip -qq apache-maven-3.3.9-bin.zip
  - export M2_HOME=$PWD/apache-maven-3.3.9
  - export PATH=$M2_HOME/bin:$PATH
  - export MAHOUT_HOME=$PWD
  - sudo apt-get -qq update
  # Install OpenCL Driver
  - sudo apt-get install ocl-icd-libopencl1
  # Install ViennaCL Source
  - wget https://github.com/viennacl/viennacl-dev/archive/release-1.7.1.zip
  - unzip -qq release-1.7.1.zip
  - sudo cp -r viennacl-dev-release-1.7.1/viennacl /usr/include/viennacl
  - sudo cp -r viennacl-dev-release-1.7.1/CL /usr/include/CL
  # Install SSH Host Client so Spark Pseudo-cluster can start w/out password
  - sudo apt-get install openssh-client
  - sudo apt-get install openssh-server
  - ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
  - cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


script:
  # - buildtools/change-scala-version.sh $SCALA_VERSION
  # Build Mahout
  # - mvn clean package $PROFILES $STANDARD_BUILD_OPTS -DskipTests -DskipCli
  - mvn clean package $STANDARD_BUILD_OPTS -DskipTests -DskipCli
  # Start Spark
  - echo $SPARK_BIN
  - wget $SPARK_BIN
  - tar -xzf *tgz
  - spark*/sbin/start-all.sh
  # Run Tests with Master at spark://localhost:7077
  - mvn test -pl $TEST_MODULES $PROFILES -Dtest.spark.master=spark://localhost:7077
