# 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

python:
  - '2.7'

env:
  # The CONCURRENCY environment var is used in tox.ini to override the --numprocesses argument
  # for PyTest's xdist plugin and the --jobs argument for PyLint. The reason this is necessary is
  # that in automatic concurrency mode the Travis environments may report a large amount of
  # available cores, but concurrent tests may fail.
  - CONCURRENCY=1 TOX_ENV=pylint_core
  - CONCURRENCY=1 TOX_ENV=pylint_tests
  - CONCURRENCY=1 TOX_ENV=core
  - CONCURRENCY=1 TOX_ENV=extensions
  - CONCURRENCY=1 TOX_ENV=e2e
  - CONCURRENCY=1 TOX_ENV=ssh
  - CONCURRENCY=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
