# 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:
  - USER_LANGUAGE=en USER_REGION=US'
  - USER_LANGUAGE=fr USER_REGION=FR'
  - USER_LANGUAGE=ja USER_REGION=JP'

os:
  - linux

jdk:
  - oraclejdk8

# Caches mvn repository in order to speed upbuilds
cache:
  directories:
    - $HOME/.m2
    - $HOME/.npm

before_cache:
  # Remove nifi repo again to save travis from caching it
  - rm -rf $HOME/.m2/repository/org/apache/nifi/

# before_install aids in a couple workarounds for issues within the Travis-CI environment
#   1. Workaround for buffer overflow issues with OpenJDK versions of java as per https://github.com/travis-ci/travis-ci/issues/5227#issuecomment-165135711
#   2. Workaround for non-existent Maven repository as per: https://github.com/travis-ci/travis-ci/issues/4629#issuecomment-131214465
before_install:
  - sudo hostname "$(hostname | cut -c1-63)"
  - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts
  - sed -i.bak -e 's|https://nexus.codehaus.org/snapshots/|https://oss.sonatype.org/content/repositories/codehaus-snapshots/|g' ~/.m2/settings.xml
  - echo "MAVEN_OPTS='-Xmx2g -XX:+UseG1GC'" > ~/.mavenrc
  - cat ~/.mavenrc
  # Remove nifi repo again to save travis from caching it
  - rm -rf $HOME/.m2/repository/org/apache/nifi/

install: true
    
script:
  # Replace variables seems to be the only option to pass proper values to surefire
  # Note: The reason the sed is done as part of script is to ensure the pom hack 
  # won't affect the 'clean install' above
  - bash .travis.sh
  - mvn -T 2 clean install -Pcontrib-check,include-grpc,include-atlas,include-hive3 -Ddir-only | grep -v -F -f .travis-output-filters && exit ${PIPESTATUS[0]}
