# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

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:
    # Keep 1.10 in testing matrix because stable version of Docker for Mac has Kube v1.10.
    - TRAVIS_KUBE_VERSION=1.10 OW_INCLUDE_SYSTEM_TESTS=true OW_CONTAINER_FACTORY=docker
    - TRAVIS_KUBE_VERSION=1.12 OW_INCLUDE_SYSTEM_TESTS=true OW_CONTAINER_FACTORY=docker
    - TRAVIS_KUBE_VERSION=1.13 OW_INCLUDE_SYSTEM_TESTS=true OW_CONTAINER_FACTORY=docker
    - TRAVIS_KUBE_VERSION=1.13 OW_INCLUDE_SYSTEM_TESTS=false OW_CONTAINER_FACTORY=kubernetes

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 20 ./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/incubator-openwhisk-deploy-kube
