#
# 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: "coq5Z9fetlW7kTfdn5orA2NNFYD6D3T7DWvFVGgFnmMXphIO6gHoN+fTDyDnQYs1GRgBL4fEgFcHaDhysJBAdXfQ0PFWyc4aBT+KSnc8SUWZPhqaM84Uwea0CyaZaupKbmWM3JFipLh+SBXhhD8rmpi0N57YTSKgIPmGylO/WcaO8fE6K/JRy4/KISD03nQHmTsXgtZ1bmM9+Yzimd4zBBURMpQKp72vHnvy35G/iP4D9LmbzHrfDocdhjI1FPPE0iDqMOLV/BMGeKtpVjkVj1EwizWR+YSfWcm6g1RiSh++hMMmtrOms7sXWyWVqoenxQcT3/ZqG3HuAIOhOu8TewMG937CHm9zMjIsJSwMbghAKceyxuWFjUmyLjrD91n+UxfyqVwaMXyIEqcMUarKt7tjgohXL+datFwgC41PGS8CukLfu5NkZQ/nEWiQ523pKKp3qfL9G3rTXpoJ8w73BSKtE8HPmP1oT0djDQ36oxhLx1dCLx+XAY9QFwp/KY2VYHAiYdc6pqtm3u9rcEAlXxwW1kpYsgx2xctE6Bwi5ukwT+p66QQwGzjXeUxz9FdjmXgVuVoIVUywkEpgRsuPm7yXWbpHrxHAOl+bq55BsSvyS6YHAtVJaD2q6W4etodF5uH6p5bwTMKxvkRClh5dfYWl9IZpQ9djQN0n3M7Cz+c="
