# 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: groovy

sudo: required
dist: trusty

matrix:
  include:
    - jdk: openjdk10
    - jdk: oraclejdk9
    - jdk: oraclejdk8
    - jdk: openjdk7

before_install:
  - |
    if [ $TRAVIS_JDK_VERSION == "openjdk7" ]; then
      BCPROV_FILENAME=bcprov-ext-jdk15on-158.jar
      wget "https://bouncycastle.org/download/${BCPROV_FILENAME}"
      sudo mv $BCPROV_FILENAME /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext
      sudo perl -pi.bak -e 's/^(security\.provider\.)([0-9]+)/$1.($2+1)/ge' /etc/java-7-openjdk/security/java.security
      echo "security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider" | sudo tee -a /etc/java-7-openjdk/security/java.security
    fi

# adjust gradle.properties and _JAVA_OPTIONS if needed
before_script:
  - |
    if [ $TRAVIS_JDK_VERSION == "openjdk7" ]; then
      export _JAVA_OPTIONS=-Xms500m\ -Xmx1500m
    else
      unset _JAVA_OPTIONS
    fi

script:
  - ./gradlew -version
  - travis_wait 60 ./gradlew -PuseAntlr4=true test

# As recommended in:
# https://docs.travis-ci.com/user/languages/java/#Caching
before_cache:
  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/

cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/
