# 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: false
dist: bionic
language: generic

cache:
  directories:
    - $HOME/.m2

env:
  global:
    - KEY=default VALUE=default

# Environment to testing with different versions, disabled because ranger is not compatible
#  - KEY=hadoop.version VALUE=2.8.0

jobs:
  include:
    - name: Linux AMD64 OpenJDK8
      env: JDK_VERSION=8
    - name: Linux AMD64 OpenJDK11
      env: JDK_VERSION=11
    - name: Linux ARM64 OpenJDK11
      arch: arm64-graviton2
      dist: focal
      virt: lxd
      group: edge
      env:
        - JDK_VERSION=11
        - MAVEN_ARGS="-DskipJSTests=true -P!all"

before_install:
  - export MAVEN_OPTS="-Xmx1200M -XX:MaxPermSize=768m -Xms512m"
  - sudo apt update -y
  - sudo apt install openjdk-${JDK_VERSION}-jdk maven

install:
  - mvn install $MAVEN_ARGS -D$KEY=$VALUE -DskipTests -Dmaven.javadoc.skip=true --no-transfer-progress -B -V

# KafkaRangerAuthorizerGSSTest is a failing test, TestLdapUserGroup needs too much memory for travis
script:
  - mvn test $MAVEN_ARGS -D$KEY=$VALUE -Dmaven.javadoc.skip=true -B -V -pl !plugin-kafka,!ugsync,!hive-agent
  - mvn test $MAVEN_ARGS -D$KEY=$VALUE -Dmaven.javadoc.skip=true -B -V -pl plugin-kafka -Dtest="*,!KafkaRangerAuthorizerGSSTest"
  - mvn test $MAVEN_ARGS -D$KEY=$VALUE -Dmaven.javadoc.skip=true -B -V -pl ugsync -Dtest="*,!TestLdapUserGroup"
  - if [[ "$JDK_VERSION" != "8" ]]; then mvn test $MAVEN_ARGS -D$KEY=$VALUE -Dmaven.javadoc.skip=true -B -V -pl hive-agent -Dtest="*,!HIVERangerAuthorizerTest" -DfailIfNoTests=false ; fi
  - if [[ "$JDK_VERSION" == "8" ]]; then mvn test $MAVEN_ARGS -D$KEY=$VALUE -Dmaven.javadoc.skip=true -B -V -pl hive-agent ; fi
