#
# 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.

# .travis.yml
dist: trusty

# For maven builds
language: java
jdk:
  - oraclejdk8
  - oraclejdk11
  - openjdk11
env:
  global:
    - HADOOP_HOME="/"
  jobs:
    - GOAL="verify -B -q -ff -Dsurefire.useFile=false -Dorg.slf4j.simpleLogger.defaultLogLevel=info"
before_install:
  - nvm install node  # for Web UI build
install: true
script:
  # the following command line builds the project, runs the tests with coverage
  - travis_retry mvn clean $GOAL
  # Web UI Build
  - pushd webui && npm install && npm test && popd
cache:
  directories:
  - '$HOME/.m2/repository'
  - 'webui/node_modules'  # for Web UI build

notifications:
  slack:
    rooms:
      # Apache
      - secure: iDNSliZcKu4PW55tOe8a2jxvr1OGfqaX2sCqAmHMkAH7rvOBFwln5UBaeUY8p8BIa0P12oHLCOAtqWzHiXqe2CGVz7xyXhMHD2FzAtUIQ6GocNRXkdU5JJBXMN4XOPGMX/r38GbHRhO1ThjHr3hJIhfISjnXaOMxUoIOE6aLr/Dk9LUm6iQ2eBUajmcz4vy7BuS8Wec1DOaUIH025SRDyxzkhezJjB2JgPdLsc91amWfV04tZg+NBLZmn3DhB6Jl3dRrvABbszhBqDM2tZfV1MXuI522fzKa2tMuT2dd1BxUIkIicF+IB5tLnlKmnbRXCT7gQR0KAP5bXzdZnRY8UZo+Bbd6AlHHdIHWcNItJ2b0k4LLOVJ0MfoaKmoOJoQgkAYNPIGaDHM+q1FrhJSGtPCRKN4oaGevwWQPBZot9RY8QCU0v07p+MG9wQ8sR1nbfjF0jLQiLODSVsSNVSv2c01t6HkwmOfHe+YbTy9WkKIxQq3wMLcPT7iNcHAzsY3QQ+MSJn+xWrWcvJmfsGocVUUy20DV946NGUzpfHlXnfAxLTSOkUIj4kTXmUthIolzsRDqueoTeliIN5yeHFhQr7aX+NMrrVPba48EXRLsdQUzq6okTF6XnTDoDiLSu/AxKzItqz2lAVmpc011L6F9YIN/RQi6kK44++CvHf5kaHw=
      # Nemo Dev
      - secure: T6NnhwIw61J2yCzC9icgB1ez90LDcfbiJR5I5/OOCT694d0apHSWeQshTfYBoWbMa1XYiQgSHqzIzRFsTQZHDOY+6TXeP3XljUcnLij6zFw6pW6IgiJalgUso/4+wVun3QfgNDDDouuSvzov+h+MPR32UasYM/3d0MbwcDjf34asIf6aq7cbN9b4B9FU2WzNGi7wo84B4yLSxkKQHSKrm+I923UzUFza1kyuqwAHHf/XknaJvI5ZKm3Lszo4BpM1vzIcXYhahIi5yYvI8SIwYYooZUooEIYzOCZCBD5IzfKyM3XQWw5tldkMVwssQy0NL3eHdXU7+xCFSZuJ9dAqp8UMcikE/QEXG5jdLRNtjz836gfOl2U8OWXQ7vPKciPIQL/8tpltkuBGjR8Du4qW4P0B3vOcjAnwhF4WrMkGqODy6GqxBS38ZTtVsUP0OdlVUCeA4XlqB7gycTxLzcphaGCCYui6zvI7nGuR+C5+5L2o56dd26j+5L4J2fvN4ArpXoWtGIn0SJRJR+Y+ABUApZq3SDnlC+2hzIaduORRG72R6rTjJm1tEnv0XNGOgJJsnQ+M+27y9y1BPOuJL0RnDYjTw6Z5OYJ14wvNIrDgoaJ5gogwwfHH5VzzOSUCiOYrq9dqwDgiv/28r+BwJf8coFmjs/GI0U/ykDYUvGvECoA=
