#  Licensed 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.
addons:
  hosts:
    - node1

env:
  - MODULES=Client
  - MODULES=Server
  - MODULES=Core
  - MODULES=External
  - MODULES=Integration-Test

dist: trusty
sudo: required

before_cache:
# Never upload Storm artifacts to the build cache, ensuring a clean slate every time
  - rm -rf $HOME/.m2/repository/org/apache/storm

language: java
jdk:
  - oraclejdk8
  - openjdk11
before_install:
  - rvm reload
  - rvm use 2.4.2 --install
  - nvm install 8.9.3
  - nvm use 8.9.3
  - sudo apt-get update
  - sudo apt-get install python3
  - sudo apt-get install python3-pip
install: /bin/bash ./dev-tools/travis/travis-install.sh `pwd`
script:
  - /bin/bash ./dev-tools/travis/travis-script.sh `pwd` $MODULES
cache:
  directories:
    - "$HOME/.m2/repository"
    - "$HOME/.rvm"
    - "$NVM_DIR"
