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

# We need to set "sudo: true" in order to use a virtual machine instead of a container, because
# SSH tests fail in the container. See:
# https://docs.travis-ci.com/user/reference/overview/#Virtualization-environments

dist: trusty
sudo: true

language: python

addons:
  apt:
    sources:
      - sourceline: 'ppa:fkrull/deadsnakes'
    packages:
      # Ubuntu 14.04 (trusty) does not come with Python 2.6, so we will install it from Felix
      # Krull's PPA
      - python2.6
      - python2.6-dev

python:
  # We handle Python 2.6 testing from within tox (see tox.ini); note that this means that we run
  # tox itself always from Python 2.7
  - '2.7'

env:
  # The PYTEST_PROCESSES environment var is used in tox.ini to override the --numprocesses argument
  # for PyTest's xdist plugin. The reason this is necessary is that conventional Travis environments
  # may report a large amount of available CPUs, but they they are greatly restricted. Through trial
  # and error we found that more than 1 process may result in failures.
  - PYTEST_PROCESSES=1 TOX_ENV=pylint_code
  - PYTEST_PROCESSES=1 TOX_ENV=pylint_tests
  - PYTEST_PROCESSES=1 TOX_ENV=py27
  - PYTEST_PROCESSES=1 TOX_ENV=py26
  - PYTEST_PROCESSES=1 TOX_ENV=py27e2e
  - PYTEST_PROCESSES=1 TOX_ENV=py26e2e
  - PYTEST_PROCESSES=1 TOX_ENV=py27ssh
  - PYTEST_PROCESSES=1 TOX_ENV=py26ssh
  - PYTEST_PROCESSES=1 TOX_ENV=docs

before_install:
  # Create SSH keys for SSH tests
  - ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
  - cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

  # Python dependencies
  - pip install --upgrade pip
  - pip install --upgrade setuptools
  - pip install tox
  - tox --version

script:
  - tox -e $TOX_ENV
