#
# 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
language: scala

env:
  matrix:
    - MVN_FLAG='-DskipTests'
    - MVN_FLAG='-Pspark-2.0-it -DskipTests'
    - MVN_FLAG='-Pspark-2.1-it -DskipTests'
    - MVN_FLAG='-Pspark-1.6 -DskipITs'
    - MVN_FLAG='-Pspark-2.0 -DskipITs'
    - MVN_FLAG='-Pspark-2.1 -DskipITs'

matrix:
  include:
      # Spark 2.2+ will only be verified using JDK8
    - env: MVN_FLAG='-Pspark-2.2-it -DskipTests'
      jdk: oraclejdk8
    - env: MVN_FLAG='-Pspark-2.2 -DskipITs'
      jdk: oraclejdk8
    - env: MVN_FLAG='-Pspark-2.3-it -DskipTests'
      jdk: oraclejdk8
    - env: MVN_FLAG='-Pspark-2.3 -DskipITs'
      jdk: oraclejdk8


jdk:
  - openjdk7

addons:
  apt:
    sources:
      r-packages-trusty
    packages:
      r-base

cache:
  pip: true
  directories:
    - $HOME/.m2

before_install:
  - sudo apt-get -y install python3-pip python-dev
  - sudo apt-get -y install libkrb5-dev
  - sudo apt-get -y remove python-setuptools
  - sudo pip2 install --upgrade "pip < 10.0.0" "setuptools < 36"
  - sudo python3 -m pip install --upgrade "pip < 10.0.0" "setuptools < 36"
  - sudo pip2 install codecov cloudpickle
  - sudo python3 -m pip install cloudpickle

install:
  - mvn $MVN_FLAG install -Dskip -DskipTests -DskipITs -Dmaven.javadoc.skip=true -B -V

before_script:
  - sudo pip2 install "requests >= 2.10.0" pytest flaky flake8 requests-kerberos
  - sudo pip3 install "requests >= 2.10.0" pytest flaky requests-kerberos

script:
  - mvn $MVN_FLAG verify -e

after_success:
  - bash <(curl -s https://codecov.io/bash)

after_failure:
  - for log in `find * -name "*.log" -o -name "stderr" -o -name "stdout" -o -name "rat.txt"`; do echo "=========$log========="; cat $log; done
