#
# 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
group: deprecated-2017Q3
language: scala
services:
- docker

notifications:
  email: false
  webhooks:
    urls:
      # travis2slack webhook to enable DMs on openwhisk-team.slack.com to PR authors with TravisCI results
      secure: "1lEBnsNFiwSLx2tp3UqzFcfLsweth5MO9Rq/kKqSp99XL00z0pPvn2BgDUSUqtX1AeNoB9LWlVgaULdosp1llWP9P5z/N8eqlGEa3iTRDLWY7SDBAUnbC4W7E5v5kNLhHi3gkzb1BgbadchMNiSnpbucq+vDYAyGVSL3IrOOwHFyqrAMeG/ZI+KSqgoW4q8CjAkWjusWbxwOc/DmiIu/rsUDnAL8YUBHVjfvwlhs3MJ2EjTwpd2pUzqB+v4ENgoe29XcNFtIMHum+zDAJ9KB8Gggs86swne8xJQk6q+mGjWOQQDm1p/hfk0Y1g5aYAhO+XYgxnLhOeHOf8tpza3mTghtwdYdCVZsK530GSxyfd3M4cNSAqVHkQLQidEHQDPCXnfhM0pGiOFbYlMqUxG4P8SRv+gnjJgU6rRRuGgFVXB2gIhASRRJMqo8UYY1VGZwIpjQVaSKoGM80ZyEepfIhUarT0J/svhb1Hxd3VaWUxBCYkfKOZZfdSl32/qT7aFjcbLxCq1DWat7GFFqZPQMHpUH3JLXtXD6NCEci0rsbtIaOeSP+4qQRzXcrqESJN/d8Ps8wkGOiDjB7lmSJ23n5yI9mg5ecnMozvxK03k3aQK51UyX05+WN8GPLZz7F77i5aMjAL9SVpmEpVk0kGq/u6KFXQoBM0MrI7AyZdRN+yc="

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
