# 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

# blacklist
branches:
  except:
    - asf-site
    - gh-pages

services:
  - docker

matrix:
  include:
    - os: osx
      osx_image: xcode8
    - os: osx
      osx_image: xcode9.2
    - os: linux
      env: CUSTOM_JDK="oraclejdk8"
    - os: linux
      env: CUSTOM_JDK="oraclejdk11"
    - os: osx
      osx_image: xcode8
      env:
        - STREAM_DISABLED="true"
    - os: linux
      env: 
        - CUSTOM_JDK="oraclejdk8"
        - STREAM_DISABLED="true"

before_install: 
- |
    echo "MAVEN_OPTS='-Xmx3072m -XX:MaxPermSize=512m'" > ~/.mavenrc
    if [ "$TRAVIS_OS_NAME" == "osx" ]; then
        export JAVA_HOME=$(/usr/libexec/java_home);
    fi
    if [ "$TRAVIS_OS_NAME" == "linux" ]; then
        jdk_switcher use "$CUSTOM_JDK";
    fi
    echo "TRAVIS_PULL_REQUEST=${TRAVIS_PULL_REQUEST}"
    if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
        export DLOG_MODIFIED="true"  
        echo "Enable testing distributedlog modules since they are not pull requests."
    else
        if [ `git diff --name-only $TRAVIS_COMMIT_RANGE | grep "^stream\/distributedlog" | wc -l` -gt 0 ]; then
            export DLOG_MODIFIED="true"  
            echo "Enable testing distributedlog modules if this pull request modifies files under directory 'stream/distributedlog'."
        fi
        if [ `git diff --name-only $TRAVIS_COMMIT_RANGE | grep "^site\/" | wc -l` -gt 0 ]; then
            # building the website to ensure the changes don't break
            export WEBSITE_MODIFIED="true"
            echo "Enable building website modules if this pull request modifies files under directory 'site'."
        fi
    fi

install: true

script: .travis_scripts/build.sh

cache:
  directories:
    - $HOME/.m2
