# 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

env:
  global:
    - JABBA_HOME=$HOME/.jabba
    # RI binaries are the Oracle reference implementation
    - DEFAULT_JDK=adopt@1.8.0-252

cache:
  directories:
    - "$HOME/.m2"
    - "$HOME/.jabba"

jobs:
  include:
    # JDK 8 builds (LTS)
    - os: linux
      env:
        - TRAVIS_JDK=$DEFAULT_JDK
    - os: linux
      env:
        - TRAVIS_JDK=adopt-openj9@1.8.0-252
    - os: linux
      env:
        - TRAVIS_JDK=amazon-corretto@1.8.252-09.1
    - os: linux
      env:
        - TRAVIS_JDK=liberica@1.8.252-9
    - os: linux
      env:
        - TRAVIS_JDK=zulu@1.8.252
    # JDK 11 builds (LTS)
    - os: linux
      env:
        - TRAVIS_JDK=adopt@1.11.0-6
    - os: linux
      env:
        - TRAVIS_JDK=adopt-openj9@1.11.0-6
    - os: linux
      env:
        - TRAVIS_JDK=amazon-corretto@1.11.0-6.10.1
    - os: linux
      env:
        - TRAVIS_JDK=zulu@1.11.0-6
    # JDK 14 builds (latest)
    - os: linux
      env:
        - TRAVIS_JDK=adopt@1.14.0-0
    - os: linux
      env:
        - TRAVIS_JDK=adopt-openj9@1.14.0-0
    - os: linux
      env:
        - TRAVIS_JDK=openjdk@1.14.0

before_cache:
  - rm -rf "$HOME/.m2/repository/org/apache/shiro"

before_install:
  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . $JABBA_HOME/jabba.sh; fi
  - if [ "$TRAVIS_OS_NAME" == "osx" ]; then curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . $JABBA_HOME/jabba.sh; fi

install:
  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then $JABBA_HOME/bin/jabba install $TRAVIS_JDK; jabba use $TRAVIS_JDK; fi
  - if [ "$TRAVIS_OS_NAME" == "osx" ]; then $JABBA_HOME/bin/jabba install $TRAVIS_JDK; jabba use $TRAVIS_JDK; fi
  - java -version

script:
- "mvn -e -Pdocs install apache-rat:check -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"

after_success:
  # do a coverage analyses for each PR or branch, but only once for each build matrix.
  - |
    if [ "$TRAVIS_JDK" == "$DEFAULT_JDK" ]; then
      bash <(curl -s https://codecov.io/bash) -f test-coverage/target/site/jacoco-aggregate/jacoco.xml
    fi
