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

env:
  - MODULES=storm-core
  - MODULES='!storm-core'

language: java
jdk:
  - oraclejdk7
  - oraclejdk8
before_install:
  - rvm use 2.1.5 --install
  - nvm install 0.12.2
  - nvm use 0.12.2
install: /bin/bash ./dev-tools/travis/travis-install.sh `pwd`
script: /bin/bash ./dev-tools/travis/travis-script.sh `pwd` $MODULES
sudo: false
cache:
  directories:
    - "$HOME/.m2/repository"
    - "$HOME/.rvm"
    - "$NVM_DIR"
