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

sudo: required
dist: xenial
jdk: openjdk8
language: java
services:
- docker

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "tQdW9TAFev+emlmTwNlE1eA4jcaYvsuVQHBGfcX0GZQZY38tTZd6nfF6UJAJbe604915fAHC2KqFXXUPj1Jo0eMcv71+0zIdc7Qp1bj53D6WZpqBJyGnsdRaCP56PYBcXGXz6PURzjWaq43gZKhUafcY3KIHJdygsV5wd4ynVSJR92rOSR29DPedxnzO41HlbVsZ/oAFasaCi3vJCrpapeul7SHJ+Sxbq+syNAMV+iAdzKBMI8KrMCQhTcRwKpVVUYZArX8gXGx7nuveztv4DOJ32MZSaDYeiLCuvxCWJkj4TfLgdpWok9PaUjrBg7HzNsIGAw4Kn0D7Vdy3UPU9gQshYF/4GC2/16BcCF9LDHAOCAkd2gpd/JuQJ11lhNdAKeKtmGw1NoWhi7BRmHUmbKOJcZoWTc+ng82xusIWqxSn5elDryDq16TgAZ3yt8W7nQ4WbuyJtGtKdxbOSYQhpJNZJWwKN1J8LcVIXwSvBEvK0gvxuj9oh7gyKlidU1/Y9wnJYFFDTdkjkTCFk9oTsPzSgolPa3itn05VkUTjMmd0XSjJ4xYFxoSXMOxS5PtPznyDC8O7ziyiV+fv6xy8GvwCGjCrrkhsCACg+kNmkreI9sd4XxWUR0l8scfO6Vcoqj5G1O74T9+ywCSuxv0JnL/A4u7B7j9/06JWpwekNjM="

env:
  global:
    - secure: "mBHstQIJFTt7klYxMR+GLQ97YA2jDgOVd4vBOCj6clugG6ujKvV0716r3U//4/qI0D7tu0EfSnGTs3xJkSx4Ctfz2xGfAA2leEmZJSoOxcvlayWu41+QLvH4ZCbBBchifvpHR1z2ilZF0owtwo3wlDL51zn+rxx/zmA6daesW7ggG15+uron+d1esbT9nEQVZfIVGOyK6vgcuF4kMPR181p07khG7jbRnH6F3hlox2el3t0ftRZJcADWqlSgNfv1EwCQBbhi/POTNeYbapLxwWhPbgNDHzAYvJrCTWj1M9/6wewp6q1rlDwsukRQA9zVbvjXqf+JCQYoWTsoamj3LARmsUKWLsU9+wOUxwiyZwZNXYGTke7eVvoQv3D+8Zsfv+LGNoYwCaNz5+IX5BdTDi4gIPNyulYanSh7UPG05tHXCXHXVEBPXubxEmXjNvVS9BC2YozSW6GMEyaRSh5lS2Ae9VuLFUSgh+Eernswvlt3KLb7dIhf1wBa/ekecMwsOx+6rMokPl4/LrcbxMbrd/lYYMD98BSgbxBBSyFWJOYfR6toFOGourfV6CP5mtbi/lxaM5LTskj9+VNGVqV0mSZwhpVrqU1Cf/DtrI1B0y7xJRiaCD7opnQ9hKBcXTm0F0zW8TGAv+h5UmDMItt0ZKuMYPpOM4eiR679fOsvmFA="
    - secure: "cZijVhCVtuBSAH/EpjIxfXSjZGjRULM5UYyvKkDZx/FqMd47K0+xzDWIfizowvFa4bGjU2JgjklmlERdF/P3Xp34UDciLvt7q274G8Rqnlq52KMM56iL/LbkeISeaRgbN7lWq+XZnkRDojAIrM67HUn9lsYs4SXAY8HCBXPnzhLN8dRE7BbEGKjQJceUQMxKNfiCVJ7r29qFXbdtjMQ8ea6lHJkczUaLKEFWYGpqIGXJMYAhDGd54OuwqrjOQR1AtNGjyEy1yJRoexKemfrvYl2kUuH6qtJwQv4dQMpSOkVtHOISoiIyHjsxYnCGgKnrLRz+R2F9I1PFxZaVlJEMrG3bc7CDZbXowcnmNEy5FxdAoxgxaTWZwO8mVRnaY/u5hEOkz23Hm/Kmkq5d17XThSrwQh9GG3DZMGabINwo05yAKjSmFV1wbWZmIYzU2ls1H2P+T833TkYqV5PQfOXYFfpV7jrBT0fydgIMIEmPp20Bejf+2KvDcn8ITwR8u25g7TIkmp0CUgv5blWowtGLBH08Ps/yM4YKXX20nNuuAWVYN3OzFAHmtHHAAGaEj0z5xtpKjwSKInFQtuAa3uTG5qMb2/xBxRKhsJmXYVIYRDsGg1Kmk/G97vJSM0WZykUt3EyvfQe4xq9UtHSO5jtnVl4XxXp6gQOTWSuZyUVpIHI="

before_install:
  - ./tools/travis/setup.sh

install: true

script:
  - ./tools/travis/build.sh

deploy:
  # deploy nightly
  - provider: script
    script: ./tools/travis/deploy.sh openwhisk kafkaprovider nightly
    on:
      branch: master
  # deploy tag
  - provider: script
    script: ./tools/travis/deploy.sh openwhisk kafkaprovider $TRAVIS_TAG
    on:
      tags: true
      all_branches: true
