#  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=storm-core
  - MODULES='!storm-core'
  - MODULES='INTEGRATION-TEST'

dist: trusty
sudo: required

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