#
# 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: generic
sudo: required
dist: trusty
services:
  - docker
addons:
  apt:
    sources:
    - sourceline: 'ppa:deadsnakes/ppa'
    packages:
    - python3.6

env:
  global:
    - IGNORE_CERTS=true
  matrix:
    - TOXENV=check

matrix:
  include:
    # - python: '2.7'
    #   env:
    #     - TOXENV=py27,report,coveralls
    # - python: '3.3'
    #   env:
    #     - TOXENV=py33,report,coveralls
    # - python: '3.4'
    #   env:
    #     - TOXENV=py34,report,coveralls
    # - python: '3.5'
    #   env:
    #     - TOXENV=py35,report,coveralls
    - python: '3.6'
      env:
        - TOXENV=py36
    # - python: 'pypy-5.4'
    #   env:
    #     - TOXENV=pypy,report,coveralls
before_install:
  - python --version
  - uname -a
install:
  - sudo pip install tox
  - virtualenv --version
  - easy_install --version
  - pip --version
  - tox --version
  - ./travis/setup.sh
script:
  - tox -v
after_failure:
  - more .tox/log/* | cat
  - more .tox/*/log/* | cat
notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "nFsJrXBMqT45s4x7FxwVrS2QSRSxRu3pZq/qACi9Gg7nzCyvDnCqe2tSjbBByB1JB+u70wUIGPsCraC1TsXU6sVnEmq9kPwOoP24S+ar1/8P7fcscI2WQFcfN0TGl7hlmc7Pu38pMMdFDs2YJ37AagTB32VOa7uEdjN+YHAvHNlXGv5wWCmbqpXetO3nM3jtD9ocJyM9J2Rpkht13lg3PoB4NTz1KcbKCz/caRPJM/rT9bizg6TU1UiGeU84bXoH/6v6uGBgboB4JM4T3JHXAOBLcSXDldyz05HplrnqE8w2lFLHZzuJXkFbJH6gzuuoIIhs+iFa++FrSApQM7RHHT16kL/Ny0/dE8OzxNz4cw2MqQWqgsRPmbh3FQE8o0remnhYSxJGHMAUwGF6H5F2iDxO+dFK8lkfWx47lLsZ1Lp7VFlCX/cb/jBgKDr0TA6FQ8qsN0SClK0KzK0e5eOAAtwzMv6TKxtY4ZGEw8QHH4T1PBPs/VLs1g095tq+G8b1aL5Km8ZqyLRP7rU1guFECd8gpKggEIztWMh9Wunfz3n9ZS8dh9FfqTj1clICekTY2BQP29rlEXbG8HQRtz1it381nrjph/hQKjRiHsZjzs6NBXpFkqO9olmKeSJrJf0qGi1bdKUBBELFRYCGsDVEY0zIsi4f71uhsDn2ZklqDZg="
