# 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

matrix:
  include:
    - stage: "Build"
      name: "Build Java 8 EN"
      jdk: openjdk8
      script: >-
        mvn clean install -Pcontrib-check,jsUnitTests
        -Dmaven.surefire.arguments="-Duser.language=en -Duser.region=US"
        | grep -v -F -f .travis-output-filters
        && exit ${PIPESTATUS[0]}
    - stage: "Build"
      name: "Build Java 8 FR"
      jdk: openjdk8
      script: >-
        mvn clean install -Pcontrib-check,jsUnitTests
        -Dmaven.surefire.arguments="-Duser.language=fr -Duser.region=FR"
        | grep -v -F -f .travis-output-filters
        && exit ${PIPESTATUS[0]}
    - stage: "Build"
      name: "Build Java 8 JP"
      jdk: openjdk8
      script: >-
        mvn clean install -Pcontrib-check,jsUnitTests
        -Dmaven.surefire.arguments="-Duser.language=ja -Duser.region=JP"
        | grep -v -F -f .travis-output-filters
        && exit ${PIPESTATUS[0]}
    - stage: "Build"
      name: "Build Java 11 EN"
      # Do not specify "jdk:" here, install-jdk.sh will download the JDK set JAVA_HOME appropriately
      before_script:
        # Download the newest version of sormuras' install-jdk.sh to /tmp
        # install-jdk.sh is used by Travis internally, sormoras is the maintainer of that script
        - wget -O /tmp/install-jdk.sh https://github.com/sormuras/bach/raw/master/install-jdk.sh
        # Need to specifically install AdoptOpenJDK 11.0.4 (Linux, HotSpot) since Travis does not offer it by default
        # The link to the AdoptOpenJDK 11.0.4 .tar.gz is taken directly from AdoptOpenJDK's website
        - >-
          source /tmp/install-jdk.sh
          --url 'https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jdk_x64_linux_hotspot_11.0.4_11.tar.gz'
      script: >-
        mvn clean install -Pcontrib-check,jsUnitTests
        -Dmaven.surefire.arguments="-Duser.language=en -Duser.region=US"
        | grep -v -F -f .travis-output-filters
        && exit ${PIPESTATUS[0]}

os:
    - linux

# Caches mvn repository in order to speed up builds
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-registry/

services:
    - xvfb

addons:
    chrome: stable

# before_install aids in setting up the Travis-CI environment
#   1. Configures pre-installed Chrome on Travis CI to be used in “headless” mode
before_install:
    - google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &

# before_script aids in setting up the Travis-CI environment
#   1. simulate an `X` server on Travis CI for karma tests that require a GUI
before_script:
    - export DISPLAY=:99.0
    - sleep 3 # give xvfb some time to start

# skip the installation step entirely
install: true


