# 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: python
python:
  - "2.7"
  - "3.4"
  - "3.5"
notifications:
  email: false
install:
  - sudo apt-get update
  # We do this conditionally because it saves us some downloading if the
  # version is the same.
  - if [[ "$TRAVIS_PYTHON_VERSION" == "2.7" ]]; then
      wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh -O miniconda.sh;
      DEPS=deps_py2.txt;
    else
      wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh;
      DEPS=deps_py3.txt;
    fi
  - bash miniconda.sh -b -p $HOME/miniconda
  - export PATH="$HOME/miniconda/bin:$PATH"
  - hash -r
  - conda config --set always_yes yes --set changeps1 no
  - conda update -q conda
  
  # Useful for debugging any issues with conda
  - conda info -a
  
  # Add conda-forge to search so all dependencies can be resolved
  - conda config --add channels conda-forge
  - conda create -q -n test-environment nose python=$TRAVIS_PYTHON_VERSION --file $DEPS
  
  # Install ocw
  - source activate test-environment
  - python setup.py install
  
  # Install coverage plugin
  - pip install coverage

# Workaround to get travis build working with matplotlib
before_script:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - sleep 3 # give xvfb some time to start

script:
  - chmod a+x test.sh
  - ./test.sh $TRAVIS_PYTHON_VERSION
after_success:
  - coveralls
