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

dist: xenial
sudo: required

env:
  global:
  - secure: d7CuMXbhT83W2x78qiLwgogX1+3aPicd1PlTwwNNDN6QSkImbxareyKThnsqlHIiNj3o5l5DBuiYjy7wrF/xD1g8BQMmTwm99DRx5q3CI3Im3VCi/ZK8SaNjuOy24d7cf5k2tB/87Gk7zmKsMDYm+fpCl+GpgUmIEeIwthiAxuXSDWZ8eQPIptmxj56DeFRNouvXG+dEUtBfWiwN27UPxNKExCixFnegmdtffLbz6hhst7BHr5Ry9acbycre98PCwWZcu9lxFs+SJ1kvnzX2iue4otmDkF1WkJjxaOFPJVs/D3YItg+neLCSxjwBskPed+Fct8bOjcM/uVROJPNIq5icBmaPX2isH0lvtxOeVw/dmioWYXYPN9ygBOe4eO/vtPllN0bcAUo5xl9jXev8ciAozYrYpHVh9Fplfd81rcYTeYzALmRJBdoiWoc3KQGzwGc9sB1ffmy+KWgG9T0zbnS4fALSR4PSzyNlKSLXw9vuvdNP0OBYtO+6yTJXavIxqmDoj64Lb93n+uGPatnaIGPTKEEBMJTSjsgYVEfxzzZuxUT9Ldkf2lzqvN2PCllGoMqxkgsdb8i4v4QgRaMWBDbKa5Va4k0O4dnhRmtdbJavOSKN6fECJbyfoJlV1VvJGxk5znVLRznBmUPBKbNccyPZJULugKD3QIh4q8Q5jBU=
  - secure: CJtnU94HTDqd4A6uvhFl8IpnmU+wTdlzb8bPBFUl/lI/VKXiRrYpgJdKUro5xEoxFKuqMprLhbyf66niyWLTIeogjUAEu/h/o2dBVeGgSGKoqC0hQgqvnxKFeGlzFJ0XuEs3vbStJGRnQszGsfnnDrscJtR0x9X+1w4aBKI7iPyyuFtVkDD1UsmBbSi+M8FTeq7G7A0reMDaey7uog3CFCpIMl4geshcohQEcKEGbnXQZoLPFpb7cBOE83VXBJ7Y7Dgf/U4keiLovvnuJThGKZm/SVV2KlELmBmtmbx3rMT6Vb5k9ChSdRWapromNnnzmJBIQ5Scc2mwV3A93/SMha1F3IlYpDKs5djfTw8jZfVnuiou7HhTaRjHkmmcwP12/k30gLe2kw0Vezg1TCY4zgtOpcmCxc8RHEy0ceA74rKvRi8LbexTCwX+iAMQFn/pSrh/OqAq/50JbLyczcoO1zXWS38txUQNLW8i+XllhCg9pjkjyfBeGjOOcWiVIz9rWJd2XufjSXDcj6xoZHtkh1XDt1CnVkpsYKtyyZucQnhUM9ebmaWqbSW2+bpqC/2hI+G+kOyyCesGdB1q+VmN1augMMs6RgWjk4yw5dyLAshATSoUlE8KH2cDcJL19r4ECaQ99PSLwxoB89yfPoJiNc42vwxRdsLmB1BMNyPa81Y=
  matrix:
    - TRAVIS_KUBE_VERSION=1.13 OW_INCLUDE_SYSTEM_TESTS=true OW_CONTAINER_FACTORY=docker
    - TRAVIS_KUBE_VERSION=1.14 OW_INCLUDE_SYSTEM_TESTS=true OW_CONTAINER_FACTORY=docker
    - TRAVIS_KUBE_VERSION=1.14 OW_INCLUDE_SYSTEM_TESTS=false OW_CONTAINER_FACTORY=kubernetes
    - TRAVIS_KUBE_VERSION=1.14 OW_INCLUDE_SYSTEM_TESTS=false OW_CONTAINER_FACTORY=kubernetes OW_LEAN_MODE=true
    - TRAVIS_KUBE_VERSION=1.14 OW_INCLUDE_SYSTEM_TESTS=true OW_CONTAINER_FACTORY=docker OW_LEAN_MODE=true

services:
  - docker

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: L6YB/Fmn0lC9z4AEw+xGsmnGdgqxwMccFLL0DLlo2jM4APyVAVAmpuQhbb+YrPmpfD0GIGLaz2stvamO9znr7l5NPxnQEdUHo1vsdSEZn2S5NMGNqZBThAD2Bwocu2bMC8AXB7AW1bFnEWlJTiuR8dsQhxZaoVrc0TwTm8fEoHggWPUDHDWVxltv4zLOBhRsRYIn5VCpr5yFZax8F0mPxfeSIdl7mEMeDO6quuBqdhWqbts4Lg3VPYZ7p1c+XyEgEQFIFo9FAnL0IjKf9epw+SAZpXdZ4IRk3GQUT67MyA2ZzzxVzWZI+3EV7Ds3q6Nvpuv/4jxb5U5Did0e8gmqbyKgNWivBLraUpgZ+7jn+Uq+JYGA5GkJ4SMmtClYWNXGG7eKDguudJKytSJKKK7aiUrO2munOlcrJJVkk//0jjtbgcKaowWHcH3Gh5x9fFq4uUFhpqpXsgi7ZPw/5GYUfCLSyKNcRs4BzCBlOx7QgnmbK1MMGqkksiirujnJekNdBG/sAXnIo8Uj9+bE8J3+8/u2NxUuFn2tPB26bQobOUMv8Y/zpIzuS26MKqVHJ9d2FrYf+bDEmvGOzoroXzJA4nJA8dCBSzeakiB9E5TtyMGCwJHYHqgKfr2I8g7RKa0JOomqYxZR2b3yrAU5aWpMQ5HlGvrxSNdFhYI7wBoX9as=

before_install:
  - ./tools/travis/setupscan.sh
  - ./tools/travis/scancode.sh
  - ./tools/travis/start-kubeadm-dind.sh

script:
  - ./tools/travis/deploy-chart.sh
  - travis_wait 42 ./tools/travis/run-tests.sh
  - ./tools/travis/collect-logs.sh
  - ./tools/travis/box-upload.py "logs" "deploy-kube-$TRAVIS_BUILD_ID-$TRAVIS_BRANCH-$TRAVIS_JOB_NUMBER.tar.gz"

deploy:
- provider: script
  script: ./tools/travis/publish-images.sh
  on:
    branch: master
    repo: apache/openwhisk-deploy-kube
