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

# s3 deployment based on http://about.travis-ci.org/blog/2012-12-18-travis-artifacts/

# send to fully-virtualized infrastructure: https://docs.travis-ci.com/user/trusty-ci-environment/
sudo: required
dist: trusty

cache:
  directories:
  - $HOME/.m2

# do not cache our own artifacts
before_cache:
  - rm -rf $HOME/.m2/repository/org/apache/flink/

install: true

language: java

# - define unique cache names in case the auto-generated ones are not unique
#  (see https://docs.travis-ci.com/user/caching/#Caches-and-build-matrices)
# - See https://issues.apache.org/jira/browse/FLINK-1072
matrix:
  include:
    - jdk: "oraclejdk8"
      env:
        - TEST="core"
        - PROFILE="-Dhadoop.version=2.8.0"
        - CACHE_NAME=JDK8_H280_CO
    - jdk: "oraclejdk8"
      env:
        - TEST="libraries"
        - PROFILE="-Dhadoop.version=2.8.0"
        - CACHE_NAME=JDK8_H280_L
    - jdk: "oraclejdk8"
      env:
        - TEST="connectors"
        - PROFILE="-Dhadoop.version=2.8.0 -Pinclude-kinesis"
        - CACHE_NAME=JDK8_H280_CN
    - jdk: "oraclejdk8"
      env:
        - TEST="tests"
        - PROFILE="-Dhadoop.version=2.8.0"
        - CACHE_NAME=JDK8_H280_T
    - jdk: "oraclejdk8"
      env:
        - TEST="misc"
        - PROFILE="-Dhadoop.version=2.8.0 -Dinclude_hadoop_aws"
        - CACHE_NAME=JDK8_H280_M
    - jdk: "openjdk8"
      env:
        - TEST="core"
        - PROFILE="-Dhadoop.version=2.4.1"
        - CACHE_NAME=JDK8_H241_CO
    - jdk: "openjdk8"
      env:
        - TEST="libraries"
        - PROFILE="-Dhadoop.version=2.4.1"
        - CACHE_NAME=JDK8_H241_L
    - jdk: "openjdk8"
      env:
        - TEST="connectors"
        - PROFILE="-Dhadoop.version=2.4.1 -Pinclude-kinesis"
        - CACHE_NAME=JDK8_H241_CN
    - jdk: "openjdk8"
      env:
        - TEST="tests"
        - PROFILE="-Dhadoop.version=2.4.1"
        - CACHE_NAME=JDK8_H241_T
    - jdk: "openjdk8"
      env:
        - TEST="misc"
        - PROFILE="-Dhadoop.version=2.4.1"
        - CACHE_NAME=JDK8_H241_M

git:
  depth: 100


env:
    global:
        # Global variable to avoid hanging travis builds when downloading cache archives.
        - MALLOC_ARENA_MAX=2
        # Build artifacts like logs (variables for apache/flink repo)
        - secure: "gL3QRn6/XyVK+Em9RmVqpM6nbTwlhjK4/JiRYZGGCkBgTq4ZnG+Eq2qKAO22TAsqRSi7g7WAoAhUulPt0SJqH7hjMe0LetbO0izbVXDefwf2PJlsNgBbuFG6604++VUaUEyfPYYw9ADjV59LWG7+B/fjbRsevqRBZ30b1gv/tQQ="
        - secure: "eM9r8IglvnUKctxz/ga6hwGnCpdOvGyYdGj0H/UiNDEx3Lq1A6yp3gChEIXGJqRUXDI5TaIuidunUGY7KHml8urm8eG2Yk2ttxXehZqLpEaOU2jdNJCdLX8tlVfh14T9bxG5AYHQEV3qJUqDFtfXD3whvzuinrm1oEIA3qUxiA8="
        - secure: "EQYDWgJM5ANJ/sAFwmSEwSTOe9CDN/ENyQAr5/ntM67XanhTZj2Amgt9LthCRUU4EEPl/OFUTwNHMpv/+wa3q7dwVFldSIg5wyCndzJSATPyPBVjYgsXIQZVIjsq4TwTyrTteT55V6Oz2+l27Fvung2FPuN83ovswsJePFzMBxI="

before_script:
   - "gem install --no-document --version 0.8.9 faraday "

# Install maven 3.2.5 since trusty uses 3.3.9 for which shading is broken
before_install:
   - "wget https://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.zip"
   - "unzip -qq apache-maven-3.2.5-bin.zip"
   - "rm apache-maven-3.2.5-bin.zip"
   - "export M2_HOME=$PWD/apache-maven-3.2.5"
   - "export PATH=$M2_HOME/bin:$PATH"
   - "export MAVEN_OPTS=\"-Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss.SSS\""
# just in case: clean up the .m2 home and remove invalid jar files
   - 'test ! -d $HOME/.m2/repository/ || find $HOME/.m2/repository/ -name "*.jar" -exec sh -c ''if ! zip -T {} >/dev/null ; then echo "deleting invalid file: {}"; rm {} ; fi'' \;'

# We run mvn and monitor its output. If there is no output for the specified number of seconds, we
# print the stack traces of all running Java processes.
script: "./tools/travis_mvn_watchdog.sh 300"
